回答:
Peter van der Heijdenのおかげで、スペースが含まれているファイル名で機能するものを次に示します。
for f in * ; do mv -- "$f" "PRE_$f" ; done
(「-」は、ダッシュで始まるファイルで成功するために必要です。名前がなければ、mvコマンドのスイッチとして解釈されます)
ls
コマンドをに変更し*
、引数を二重引用符で囲むと、mv
スペースを含むファイルで機能します。
rename
私は常に複数のファイルの名前変更を非常に簡単に処理するのに役立ちました。
以下のために接頭辞や接尾辞の追加のファイル(ディレクトリ)のために、あなたはシンプルでかつ強力な方法を使用することができxargsの:
ls | xargs -I {} mv {} PRE_{}
ls | xargs -I {} mv {} {}_SUF
xargsのパラメータ置換オプションを使用しています:-I。また、manページから詳細を取得できます。
ls *.old | xargs -I {} mv {} PRE_{}
util-linuxを使用して現在のディレクトリのすべてのファイルとフォルダーにプレフィックスを追加するにはrename
(prename
Debianや他の特定のシステムのperlバリアントとは対照的に)、次のようにします。
rename '' <prefix> *
これにより、空の文字列の最初の出現箇所(すぐに見つかります)が検出され、その出現箇所がプレフィックスに置き換えられます。次に、ファイル名の残りの部分をその末尾に接着します。できました。
サフィックスについては、perlバージョンを使用するか、findを使用する必要があります。
util-linux
Debian Stretchでは、これをとして提供しているよう/usr/bin/rename.ul
です。
以下は、使用できる簡単なスクリプトです。非標準モジュール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
find
:あなたはまた、ループの必要性コマンドを実行することはできませんstackoverflow.com/a/33297439/2351568