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
(しかし、このリストを生成するだけで、現在の問題がどこにあるのかがわかります...)