Mvコマンドを使用して、一連のファイルを1つのフォルダーから別のフォルダーに移動します。
mv <SRC_PATH>/ABC_$t1.dat <DEST_PATH>/ABC_$t1_$$.dat
上記のコードを一連のファイルに使用しています。唯一の違いは、変数$ t1の値であるファイルの名前です。例えば:
while loop required times
do
t1=<GetValueOfT1 >
mv <SRC_PATH>/ABC_$t1.dat <DEST_PATH>/ABC_$t1_$$.dat
done
上記のコードでは、t1の値は123,234,345になります。
したがって、ソースディレクトリにABC_123.dat、ABC_234.dat、ABC_345.datがある場合、宛先ディレクトリにはABC_123_1808.dat、ABC_234_1808.dat、ABC_345_1808.datがあり、1808はpidです。
しかし結局のところ、移動先のパスは最後のファイルのみを保持しています。宛先名から「$$」を削除した場合、問題はありません。例えば:
mv <SRC_PATH>/ABC_$t1.dat <DEST_PATH>/ABC_$t1.dat
私は何を間違っていますか?
コンマ区切りの値のセットを含む変数t1
があるとします。
t1=$(GetValueOfT1) # For example t1='123,456,789'
このようなループでこれらのそれぞれを順番に適用できます
OIFS="$IFS" IFS=,
for v in $t1
do
echo "Processing with v=$v:" >&2
mv "$SRC_PATH/ABC_${v}.dat" "$DEST_PATH/ABC_${v}_$$.dat"
done
IFS="$OIFS"
シェルで値をコンマ文字で分割する必要があるため、最初の$t1
は引用符で囲まないでください。 (これは、シェル変数$IFS
によって制御されます。これを保存して、ループの最後で復元できるようにします。)残りの変数はすべて、空白やコンマでの予期しないWord分割から保護するために引用符で囲む必要があります。など。最後に、$v
を${v}
として提示する必要があります。そうしないと、シェルは直後に続く_
文字を変数名の一部として含みますが、$v_
はそうではありません私たちが欲しいもの。
実際に実行する前に、mv
の前にecho
(つまりecho mv ...
)を付けることをお勧めします。これにより、変更が行われる前に出力を確認できます。