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不能被引用,因为我们需要 shell 在逗号字符处分割该值。 (这是由 shell 变量 控制的$IFS,我们保存该变量,以便我们可以在循环结束时恢复它。)其余变量都应该用引号引起来,以防止它们因空格、逗号等出现意外的分词。最后,您必须呈现$v${v},否则 shell 将包含紧随其后的_字符作为变量名的一部分,这$v_不是我们想要的。

我建议您在实际运行之前添加mv前缀echo(ie ),这样您就可以在更改任何内容之前检查输出。echo mv ...

相关内容