Linux組み込みツールを使用して、スペースを含むファイル名を一括変更します。

Linux組み込みツールを使用して、スペースを含むファイル名を一括変更します。

私は次の内容を読んだ。バッチ名の変更、プレフィックスの変更私のファイルを試してみましょう。

Oldこの場合は削除して次に交換したいと思います。New

テストファイル

01. Old Name.txt
02. Old Name.txt
03. Old Name.txt

1回試してください

for f in *.txt
do
    mv "$f" "New${f#Old}"
done

出力1

New01. Old Name.txt
New02. Old Name.txt
New03. Old Name.txt

2回試してください

for i in *.txt
do
    mv ${i} ${i/#Old/New}
done

出力2(変更なし)

user@linux:~$ for i in *.txt
> do
> mv ${i} ${i/#Old/New}
> done
mv: target 'Name.txt' is not a directory
mv: target 'Name.txt' is not a directory
mv: target 'Name.txt' is not a directory
user@linux:~$ 

私のソリューションにはどのような問題がありますか?

希望の出力

01. New Name.txt
02. New Name.txt
03. New Name.txt

答え1

  1. 変数を参照してください。また、前に${i/Old/New}ポンド記号(#)を使用しないでくださいOld#ファイル名の先頭で一致が始まるように強制しますが、で始まるファイルはなく、Oldすべてで始まります0

    $ touch "01. Old Name.txt" "02. Old Name.txt" "03. Old Name.txt"
    $ for i in *.txt ; do mv -v "$i" "${i/Old/New}" ; done
    renamed '01. Old Name.txt' -> '01. New Name.txt'
    renamed '02. Old Name.txt' -> '02. New Name.txt'
    renamed '03. Old Name.txt' -> '03. New Name.txt'
    
  2. Perlrenameユーティリティをインストールして使用します(例:sudo apt-get install renameDebianとその派生製品)。これはDIYバッチ名の変更よりはるかに優れています。

関連情報