何千ものファイルを含むディレクトリがあり、各ファイルのコピーがあります。一例:
file1.txt
file1.jpg.txt
file2.txt
file2.jpg.txt
すべての*.txtファイルを削除し、*.jpg.txtを保持してから、すべての*.jpg.txtの名前を*.txtに変更したいと思います。
OpenSuse 12で実行しています。
ベストアンサー1
@roaimaが述べたように、最初にファイルを削除する必要はなく、ファイルを移動すると古いファイルが自動的に上書きされます。
1つの方法は、bashでforループを使用することです。
for f in *.jpg.txt; do mv $f ${f/%.jpg.txt/.txt}; done
説明します。
for f in *.jpg.txt; do <command>; done
:各ファイルに対してコマンドを実行します*.jpg.txt
。ファイル名は実行中に変数に保存されますf
。${f/%.jpg.txt/.txt}
:の値です$f
が、最後の項目.jpg.txt
はに置き換えられます.txt
。バラよりhttps://www.tldp.org/LDP/abs/html/parameter-substitution.htmlこれについて詳しく学んでください。mv $f ${f/%.jpg.txt/.txt}
:古いファイルの名前を.jpg
。
このコードを実行する前に、次を実行してコードが正しく実行されていることを確認できます。
for f in *.jpg.txt; do echo $f ${f/%.jpg.txt/.txt}; done
これにより、移動するファイルのペアが印刷されます。