![一部のファイルのバッチ名を変更する [重複]](https://linux33.com/image/25834/%E4%B8%80%E9%83%A8%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%90%E3%83%83%E3%83%81%E5%90%8D%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%20%5B%E9%87%8D%E8%A4%87%5D.png)
重複の可能性:
バッチの名前変更ファイル
単一のコマンドで名前を変更したいファイルがあります。ファイルは名前ですだから。名前からES Posthumusビットと各ファイルの先頭の01、02などを削除したいと思います。どのように削除しますか?
答え1
のみお使いいただけますのでbash
ご注意ください。生成されたファイル名が競合する可能性があるたとえば、同じ曲のタイトルを持つ2つのファイルがあるとします。したがって、-i
スイッチは次のようになります。
for f in *.mp3; do mv -i "$f" "${f#*Posthumus - }"; done
答え2
rename 's/\d\d\s-\s[ .A-Za-z]+-\s//' *.mp3
01 - E.S. Posthumus - Ashielf Pi.mp3 renamed as Ashielf Pi.mp3
02 - E.S. Posthumus - Oraanu Pi.mp3 renamed as Oraanu Pi.mp3
編集する:何らかの理由でそのタスクを実行するバージョンがインストールされていない場合は、rename
Perlでスクリプトの最小バージョンを簡単に作成して実行できます。これはから来たものですUnix FAQ、上記で提供された正規表現と共に使用されます。
#!/usr/bin/perl
#
# rename script examples from lwall:
# rename 's/\.orig$//' *.orig
# rename 'y/A-Z/a-z/ unless /^Make/' *
# rename '$_ .= ".bad"' *.f
# rename 'print "$_: "; s/foo/bar/ if <stdin> =~ /^y/i' *
$op = shift;
for (@ARGV) {
$was = $_;
eval $op;
die $@ if $@;
rename($was,$_) unless $was eq $_;
}