8

lista.txt というファイルに、次のようなリストがあります。

mickey
donald
daffy 
bugs

多くのファイルを含むフォルダがあります: filename1、filename2、... filenameN。

これらのファイルを繰り返し処理して、次のことを達成したいと考えています。

filename1 => mickey 
filename2 => donald ...

このタスクの実際のサンプル コードを提供してもらえますか?

4

5 に答える 5

7

あなたのためにあなたの仕事をするのは私のスタイルではありません. デバッグを手伝うことができるように、すでに試したことを投稿してもらいたいのですが、この問題はとても簡単なので、とにかく噛むつもりです。

x=1; for y in $(cat lista.txt); do mv $y filename$x; let x=$x+1; done
于 2011-07-11T08:17:07.320 に答える
6

bash 配列の使用:

files=( * )
i=0
while read -r new_name; do
  mv "${files[$i]}" "$new_name"
  (( i++ ))
done < lista.txt
于 2011-07-11T10:30:44.280 に答える
3
let "count=1"

for newname in $(cat lista.txt); do
  mv "filename$count" "$newname"
  let "count++"
done
于 2011-07-11T08:19:50.217 に答える
2

この方法で、特定の「filelist.txt」に従って、ディレクトリのすべてのflacファイルの名前を変更するために、新しいファイル記述子で二重リダイレクトを使用しました。

while read -u 9 filename ; do  
    read -u 8 newname 
    echo mv "$filename" "$newname" 
done 9<<<"$(ls -1 *flac)" 8< filelist.txt

ディレクトリ上の各 .flac ファイル名は、ファイル記述子 9 を介して変数「filename」に移動しますが、同じ繰り返しで、filelist.txt の各行はファイル記述子 8 を介して変数「newname」に移動します。

はい、新しいファイル記述子の 1 つを回避して、単にデフォルトの標準入力を使用することもできました (「-u 9」と「9」を削除)。そうすれば、対話性または制御のためにループ内に read ステートメントを含めることができ、リダイレクトされたデータによって埋められることはありません。

エコーは「テスト専用」であり、操作の承認後に削除する必要があります。

于 2013-02-16T02:42:33.680 に答える