mvコマンドを使用して、ファイルセットをあるフォルダから別のフォルダに移動します。これにはファイルの名前変更も含まれます。
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
私は何が間違っていましたか?
答え1
答え2
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
ループの終わりに復元できるように格納するシェル変数によって制御されます。)残りの変数は、誤ってスペース、カンマなどで区切られないようにするために、すべて引用符で囲む必要があります。最後に、$v
でレンダリングする必要があります。それ以外の場合、シェルには変数名の一部として${v}
すぐに続く文字が含まれます。これは私たちが望むものではありません。_
$v_
何も変更する前に出力を確認できるように、実際に実行する前にmv
プレフィックス(つまり)を追加することをお勧めします。echo
echo mv ...