テキストファイルと一致するようにファイル名を一括変更するようにこのコマンドを変更する方法[閉じる]

テキストファイルと一致するようにファイル名を一括変更するようにこのコマンドを変更する方法[閉じる]
for file in *; do read line;  mv -v "${file}" "${line}";  done < /var/www/html/uploads/songs.txt

700個のファイルをすべて変更するのと同じ方法で動作します。しかし、それは正しい順序で進まないようです。名前が変わるので順番が変わるような気がします。それとも100%確かではありません。

たとえば、次のようになります。最初のファイルは次のとおりです。

/var/www/html/uploads/Music/A.D.I.D.A_S - Live (Korn Live).mp3_Rare_2006_.mp3

まず、テキストファイルの名前を次のように変更します。

/var/www/html/uploads/Music/A_D_I_D_A_S__Live_Korn_Live__.mp3_Rare_2006_.mp3

私が言ったように、それらはすべて名前が変わり、多くのものが一致します。通常、最初と最後のいくつかです。しかし、中間部分が正しい順序を維持できないようで、最終的に別のファイル名が生成されます。

ベストアンサー1

IMHO これは非常に危険な技術です。ディレクトリのすべての変更(ファイルの追加と削除)の影響を受けます。より安全な技術は、古い名前と新しい名前をペアでリストすることです。

  • 既存のファイルを繰り返してgrep新しい名前を検索します。
  • リスト全体を連想配列としてロードします(最新バージョンのbashでは、文字列を使用して配列にインデックスを付けることができます)。
  • これらすべての複雑さを放棄し、リストの行の先頭に「mv」を追加し、スクリプトとして使用します。

以下を使用してペアリストを生成できます。

ls pattern_for_old* | paste - list_of_new_names >combined.lst

(しかし、このリストを生成するだけで、現在の問題がどこにあるのかがわかります...)

おすすめ記事