Unixを使用してディレクトリのファイル名を変更するには?

Unixを使用してディレクトリのファイル名を変更するには?

サブディレクトリのファイル名を変更するには?

このサンプルがあります。

001a
    abc001.tif
    abc002.tif
    abc003.tif
002a
    abcd001.tif
    abcd002.tif
    abcd003.tif

すべてのサブディレクトリ001 - 00xのすべてのファイルの名前を変更したいが、ディレクトリ自体の名前は変更したくありません。00011から始まる各画像フォルダから順番にファイル名を変更したいと思います。

このコマンドを実行すると、サブフォルダではなくデフォルトフォルダでのみ機能します。各サブディレクトリで繰り返し実行され、各ディレクトリが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

renamePerlベースのツール(時々呼び出される)がインストールされている場合は、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希望の効果が確実な場合は削除してください。

おすすめ記事