すべてのフォルダーとディレクトリにプレフィックスを追加したいと思います。
例:
私は持っています
Hi.jpg
1.txt
folder/
this.file_is.here.png
another_folder.ok/
プレフィックス「PRE_」を追加したい
PRE_Hi.jpg
PRE_1.txt
PRE_folder/
PRE_this.file_is.here.png
PRE_another_folder.ok/
よろしく、
Peter van der Heijden のおかげで、ファイル名にスペースが含まれている場合に機能するものを次に示します。
for f in * ; do mv -- "$f" "PRE_$f" ; done
(「-」は、ダッシュで始まるファイルで成功するために必要です。ファイル名がなければ、名前はmvコマンドのスイッチとして解釈されます)
(プレフィックスまたはサフィックスを追加ファイル(ディレクトリ)の場合、xargsによるシンプルで強力な方法を使用できます。
ls | xargs -I {} mv {} PRE_{}
ls | xargs -I {} mv {} {}_SUF
Xargsのパラメーター置換オプション-Iを使用しています。また、manページから詳細を確認できます。
これは、単純なfind
コマンドを実行して実行できます。
find * -maxdepth 0 -exec mv {} PRE_{} \;
上記のコマンドは、現在のディレクトリ内のすべてのファイルとフォルダの前にPRE_
を付けます。
Ruby(1.9+)を使用している場合
Ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'
Util-linuxのrename
(Debianや特定のシステムのPerlバリアントであるprename
とは対照的に)を使用して、現在のディレクトリ内のすべてのファイルとフォルダーにプレフィックスを追加するには、次のようにします。
rename '' <prefix> *
これにより、空の文字列(最初に見つかったもの)の最初の出現箇所が検出され、その出現箇所が接頭辞に置き換えられ、ファイル名の残りがその末尾に接着されます。できた.
suffixesの場合、 Perlバージョンを使用 または findを使用 にする必要があります。
perlの場合:
Perl -e 'rename $_, "PRE_$_" for <*>'
使用できる簡単なスクリプトを次に示します。非標準モジュールFile::chdir
を使用してcd
操作の管理を処理するのが好きなので、このスクリプトをそのまま使用するには、インストールする必要があります(Sudo cpan File::chdir
)。
#!/usr/bin/Perl
use strict;
use warnings;
use File::Copy;
use File::chdir; # allows cd-ing by use of $CWD, much easier but needs CPAN module
die "Usage: $0 dir prefix" unless (@ARGV >= 2);
my ($dir, $pre) = @ARGV;
opendir(my $dir_handle, $dir) or die "Cannot open directory $dir";
my @files = readdir($dir_handle);
close($dir_handle);
$CWD = $dir; # cd to the directory, needs File::chdir
foreach my $file (@files) {
next if ($file =~ /^\.+$/); # avoid folders . and ..
next if ($0 =~ /$file/); # avoid moving this script if it is in the directory
move($file, $pre . $file) or warn "Cannot rename file $file: $!";
}
私のシステムでは、rename
コマンドがありません。シンプルなワンライナーです。すべてのHTMLファイルを再帰的に検索し、名前の前にprefix_
を追加します。
for f in $(find . -name '*.html'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done
これにより、ディレクトリ内のファイルのプレフィックスが付けられます。
${f%/*}
は最後のスラッシュまでのパスです/
->ディレクトリ
${f##*/}
は、最後のスラッシュの前に何もないテキストです/
->パスなしのファイル名
それはそれが行く方法です:
for f in $(find /directory/ -type f); do
mv -v $f ${f%/*}/$(date +%Y%m%d)_Prefix_${f##*/}
done