サブディレクトリのファイル名を変更するには?
このサンプルがあります。
001a
abc001.tif
abc002.tif
abc003.tif
002a
abcd001.tif
abcd002.tif
abcd003.tif
すべてのサブディレクトリ001 - 00xのすべてのファイルの名前を変更したいが、ディレクトリ自体の名前は変更したくありません。0001
1から始まる各画像フォルダから順番にファイル名を変更したいと思います。
このコマンドを実行すると、サブフォルダではなくデフォルトフォルダでのみ機能します。各サブディレクトリで繰り返し実行され、各ディレクトリが1で始まるようにするには、何を変更する必要がありますか?
for file in $path/*.tif; do
mv -v "${file}" "$path/$(printf "%04d" ${num}).tif"
num=$(( ${num} + 1 ))
done
私が使用するオペレーティングシステムはOSXです
ファイル名からabcを削除したいです。これは単なる例です。すべてのファイルがabcで始まるわけではありません。
私はこれを試してみましたが、名前が変更されましたが、各サブディレクトリで1つではありません。最初から正しく機能するために何を変更する必要がありますか?
num=0
for file in */*.tif; do
echo mv -v "${file}" "$(printf "%04d\n" $num).tif"
(( num++ ))
done
What can I change in the script to not have it move the files out of the orignial directory
ベストアンサー1
rename
Perlベースのツール(時々呼び出される)がインストールされている場合は、prename
次のように1行でこれを実行できます。
rename -n 's|^.*|sprintf "%04d.tif", ++$a|e' */*.tif
作成したとおり、これは何をすべきかを伝えます。満足のいく場合は、-n
自動実行を削除または交換し、-v
何が起こるかを確認してください。
このツールがなければ、あなたと非常によく似たループを書くことができます。
num=0
for file in */*.tif; do
echo mv -v "${file}" "$(printf "%04d\n" $num).tif"
(( num++ ))
done
echo
希望の効果が確実な場合は削除してください。