私はディレクトリを言う/var/tmp/abc
には4つのファイルがあります。
12345-ram-3e3r5-io9490-89adu9.csv
45434-dam-qwe35-to9490-43adu9.csv
11234-cam-yy3r5-ro9490-85adu9.csv
14423-sam-hh3r5-uo9490-869du9.csv
すべてのCSVファイルの名前を変更したい(すべてのファイルを見つけて名前を変更したい)。これを可能な限り短い方法で(おそらく1行で):
XXXXX-ram-3e3r5-io9490-89adu9.csv
XXXXX-dam-qwe35-to9490-43adu9.csv
XXXXX-cam-yy3r5-ro9490-85adu9.csv
XXXXX-sam-hh3r5-uo9490-869du9.csv
rename -n 's/(\w+)/XXXXX/' *.csv
満足したら-n
を削除します。
試してください:
for f in *.csv; do mv -i -- "$f" "XXXXX-${f#*-}"; done
使い方:
for f in *.csv; do
これはすべてのループを開始します*.csv
ファイル。
mv -i -- "$f" "XXXXX-${f#*-}"
これにより、必要に応じてファイルの名前が変更され、ファイルを上書きする前にインタラクティブに尋ねられます。
done
これはループの終わりを示します。
例:
$ ls -1
11234-cam-yy3r5-ro9490-85adu9.csv
12345-ram-3e3r5-io9490-89adu9.csv
14423-sam-hh3r5-uo9490-869du9.csv
45434-dam-qwe35-to9490-43adu9.csv
$ for f in *.csv; do mv -i -- "$f" "XXXXX-${f#*-}"; done
$ ls -1
XXXXX-cam-yy3r5-ro9490-85adu9.csv
XXXXX-dam-qwe35-to9490-43adu9.csv
XXXXX-ram-3e3r5-io9490-89adu9.csv
XXXXX-sam-hh3r5-uo9490-869du9.csv
あなたが投稿した小さなチャレンジが好きだったので、これが私の解決策です。私はすべてのファイルが5文字の数字で始まると想定しているため、 カットコマンド を使用して、最初の数字ファイルを「XXXXX」に置き換えます。
以下は、コマンドの前のファイルです。
-rw-rw-r--. 1 daniel daniel 0 May 13 23:18 11111_bar_file.csv
-rw-rw-r--. 1 daniel daniel 0 May 13 22:54 12345_baz_file.csv
-rw-rw-r--. 1 daniel daniel 0 May 13 22:54 67890_foo_file.xml
以下は、1つのライナーコマンドです。
for src in *.csv; do dst=XXXXX$(echo $src| cut -c6-); mv $src $dst; done;
以下は、コマンド後のファイルです。
-rw-rw-r--. 1 daniel daniel 0 May 13 22:54 67890_foo_file.xml
-rw-rw-r--. 1 daniel daniel 0 May 13 22:54 XXXXX_bar_file.csv
-rw-rw-r--. 1 daniel daniel 0 May 13 23:18 XXXXX_baz_file.csv
それはあなたが探しているものですか? :)
参考文献:
フォークなし:
ls | Perl -lne '$suf=substr($_,6); rename $_, "XXXXX-$suf"'
シェルループを使用すると、mv
はファイルごとに1回フォークします。 Perlのrename
コマンドはサポートしていません。
(Perlのrenameコマンドにはいくつかの制限がありますが、この特定のケースではそれらの制限は適用されません。)
前に示したrename
コマンドと同様に、機能しますが、2種類の名前変更などの間で混乱が生じます。あなたが正しいものを持っているなら、素晴らしいですが、そうでなければ、これもうまくいきます。
Perl-renameコマンドがなく、インストールできない場合は、次のようにします。
ls | Perl -lne '$old=$_; s/(\w+)/XXXXX/; rename $old, $_'
ご覧のとおり、これは上の回答で示したものと同じ置換を使用しています。もちろん、Perlの名前の変更には他にも注意が必要です(一番上の答えは-n
すでに、次に-0
、-f
など)、そして必要な数が多いほど、この方法で独自にロールするのではなく、インストールする必要があります。