モデル入力のために変更する必要があるポイントファイルがたくさんあります。内容に応じて多くのファイルの名前を変更したいと思います。これは一行に並べられたテキストファイルです。
ファイル名:data_lat_long.txt
1 data_20_20
2 data_30_40
3 data_50_60
.
.
など。
私のファイル名は1
、、2
などです3
。4
で、からで、など1
に変更したいと思います。data_20_20
2
data_30_40
答え1
while read line ; do
mv $line
done < data_lat_long.txt
ファイルの各行を読み取り、各行をという変数に割り当てるループdata_lat_long.txt
にファイルの内容をリダイレクトします。次に、内容を引数として使用します(これはファイルに指定した先頭と終了です)。ファイルが終了するまで繰り返します。while
read
$line
mv
$line
data_lat_long.txt
これは、ファイル名にdata_lat_long.txt
スペースが含まれていないことを暗黙的に予測します(したがって、2つの列しかありません)。
ファイルにスペースが含まれている場合は、ファイルにカンマ区切り文字を使用することをお勧めします。
1,space file1
2,space file2
3,space file3
次に、次を使用します。
while IFS=',' read -a files
do
mv "${files[0]}" "${files[1]}"
done < list.txt
これは(この場合はカンマ)で区切られたテキストを名前付き配列に割り当てるオプションを利用します-a
。次に、個々の要素をインデックス化し、パラメータを二重引用符で囲みます。これにより、コマンドの実行時に配列値が拡張されます。read
IFS
$files
mv
""
mv
そしてしたがって、ファイルのスペースはパラメータ区切り文字として扱われませんmv
。mv 1 space file1
のようなことはしませんmv "1" "space file1"
。前のコマンドは、1
という名前のファイル/ディレクトリを名前のspace
ディレクトリに移動しようとしましたfile1
。