任意のファイル名から連続したファイル名に多くのファイル名を変更する方法は? [コピー]

任意のファイル名から連続したファイル名に多くのファイル名を変更する方法は? [コピー]

8,000個のイメージを持つディレクトリがあります。これらのファイルにはさまざまなファイル名があり、タイプはjpegまたはpngです。

名前を次のように変更したいと思います。

pic00001.png
pic00002.jpg

一度はpngを、もう一度はjpegを実行して2つの少し重なったセット(pic00001.png、pic00002.png、pic00001.jpeg、pic00002.jpeg)で終わっても構いません。

SEの現在の問題は、バッチの名前変更(既存のファイル名を使用して静的情報を追加または削除する場合)に関連しています。私はそうしません。フルファイル名を増やす数字に変更します。

答え1

たとえば、シェルループを使用してこれを実行できます。

for f in *.jpeg *.png
do  printf "mv '%s' pic%05d.%s \n" "$f" $((++c)) "${f##*.}"
done | sh

プログラムはシーケンス番号を一度実行し、元のファイル拡張子を保持してシーケンスを生成します。

注:コマンドまたはコマンドシーケンスを生成し、結果をシェルに渡す技術は標準のエンコードパターンです。最後のパイプラインなしで最初にプログラムを実行して、sh生成されたコマンドが適切であることを確認し、すべてがうまくいったら最終パイプラインを接続できます。 (通常の一時的な追加とは異なり、echoパイプ - シェル方法は言葉のない出力。 )

ただし、(Gilesが指摘したように)与えられた場合、一重引用符を含むファイル名はそのファイル名に対して誤った結果を生成することに注意してください。事前確認ツールが必要ない場合は、次のようにコマンドを直接実行できます。

for f in *.jpeg *.png
do
  ((++c))
  new_f=$( printf "pic%05d.%s" $c "${f##*.}" )
  mv "${f}" "${new_f}"
done

(編集者の場合:もちろん、これらの解決策も期待どおりに機能しない場合があります。たとえば、既存のファイルがすでにターゲットファイル名の形式に準拠している場合は、ファイルを作成/移動します。個々のファイルの破損を防ぐための新しい一時ディレクトリ)。

関連情報