复制并重命名脚本

复制并重命名脚本
Directory A:
        1111111_1.pdf
        2222222_1.pdf
        1234567_1.pdf
Directory B:
        abcdefg.pdf
        zzzzzzz.pdf
        1234567.pdf
        1111111.pdf
        2222222.pdf
        aaaaaaa.pdf
        bbbbbbb.pdf
        etc....
        …....

我应该使用什么方法编写一个shell脚本来仅将3个相同的7位数字文件从目录B复制到A,然后重命名为_2.pdf如下结果:

Directory A:
        1111111_1.pdf
        1111111_2.pdf
        2222222_1.pdf
        2222222_2.pdf
        1234567_1.pdf
        1234567_2.pdf

答案1

这应该满足您的要求:

for i in A/*_1.pdf
do
  root=${i#A/}
  root=${root%_1.pdf}

  if [ -f "B/${root}.pdf" ]
  then
    cp -i "B/${root}.pdf" "A/${root}_2.pdf"
  fi
done

它只是找到 A 中与 B 中存在匹配文件的每个文件,并进行相应的复制。它使用 shell 参数扩展将文件名从一种形式操纵为另一种形式。

它不仅限于 7 位数字的名称;目前尚不清楚您是否想要这样做,或者只是为了帮助解释问题。如果您希望它适用于 1 和 2 以外的数字,它也会更复杂。

我曾经cp -i避免意外覆盖。-i如果您希望它覆盖现有文件,请将其删除。

答案2

以下将做你想做的事:

cd A
B=../B  # Put path to B here
for a in *_1.pdf; do b=${a%_1.pdf}; [ -f "$B/$b.pdf" ] && cp "$B/$b.pdf" "${b}_2.pdf" ; done

如果要将上述代码放入脚本中,而不是在命令行中输入,则使用换行符和缩进会更好看:

cd A
B=../B  # Put path to B here
for a in *_1.pdf
do 
    b=${a%_1.pdf}
    [ -f "$B/$b.pdf" ] && cp "$B/$b.pdf" "${b}_2.pdf"
done

相关内容