mv コマンドはファイルセットを移動し、名前を変更します。

mv コマンドはファイルセットを移動し、名前を変更します。

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

コマンドが存在しますこの大規模な名前変更のため。

個人的に私は以下を使用しますmmv

mmv <SRC_PATH>/"ABC_*.dat" <DEST_PATH>/"ABC_#1_$$.dat"

答え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プレフィックス(つまり)を追加することをお勧めします。echoecho mv ...

関連情報