Ubuntuで多数のjpgファイル名を再帰的に変更するには、コマンドが必要です。
しかし、いくつかの問題もあります。一般的なファイルセットは次のとおりですani-estate-villas_1431640729_3.jpg
。ani-estate-villa_3627544278_7.jpg
ani-estate-villa_3143254376_5.jpg
-
すべてをに置き換えて_
すべての番号を削除してから、各ディレクトリにリセットされている番号を追加する必要があります。したがって、同じファイルセットはani_estate_villas_1.jpg
、、、ani_estate_villas_2.jpg
およびani_estate_villas_3.jpg
他のディレクトリの他のファイルと同じでなければなりません。
再帰の深さは 1 ~ 2 つのディレクトリの深さなので、見つけることもdirectory/file.jpg
ほぼdirectory/directory/file.jpg
ランダムにすることもできます。
jpgを含むすべてのディレクトリでコマンドを実行しても機能するため、誰もがこれらの属性を持つすべてのファイルの名前を変更する方法を知っていれば問題ありません。コマンドを実行する方が良いですが、400を超えるjpgファイルを手動で変更することは多すぎるため、より反復的な解決策に本当に感謝します。
krenameを試してみましたが、私のファイルは削除されました。
答え1
あなたはそれを使用することができますprename
作成された変換に基づいてファイル名を変更するコマンド真珠。
簡単に始めましょう。.jpg
ディレクトリ内のすべてのファイル名を変更するには、すべてのファイルを-
に変更します_
。s
オペレーター(私達はまた利用できますtr
)。 Perlコードを実行して各ファイル名を変換します。
prename 's!-!_!g' *.jpg
最後の数値の順序を単純なカウンタに変更するには、カウンタ変数を導入します。私はグローバル変数を$a
カウンタとして使用します(追加変数を導入する方が複雑です)。正規表現は(\.[^/.]*)$
ファイル拡張子と一致し、$1
角かっこで囲まれたグループが代替テキストで一致するものを表します。
prename 's!-!_!g; ++$a; s!_[0-9_]+(\.[^/.]*)$!_$a$1!' *.jpg
ファイル名は、filename引数で指定された順序で名前が変更されます。つまり、拡張順序によって*.jpg
ファイル番号が決まります。
または、ブロックを使用して明示的にカウンタを初期化することもできますBEGIN
。
prename 'BEGIN {$a = 1;} s!-!_!g; s!_[0-9_]+(\.[^/.]*)$!_$a$1!; ++$a;' *.jpg
現在のディレクトリのすべてのサブディレクトリでこれを行うには、次のように呼び出します。find
。
find -type d -exec sh -c 'cd "$1" && prename "$0" *.jpg' 's!-!_!g; ++$a; s!_[0-9_]+(\.[^/.]*)$!_$a$1!' {} \;