Mac OS X 结合 cp 和 cat 顺序复制和重命名列表中的文件

Mac OS X 结合 cp 和 cat 顺序复制和重命名列表中的文件

我使用的是 MacBook Pro OS X 2013 型号。我在文本文件中有一个文件名列表,list.txt以换行符分隔

list.txt 与此完全相同,但此列表会很长

e.jpeg
x.jpeg
a.jpeg
m.jpeg
p.jpeg
l.jpeg
e.jpeg

我需要这些命令将相同的文件复制到目标文件夹数千次,并且遇到了重复的文件名问题。我需要它来再次复制文件,但我想如果我在将它们复制到新文件夹时按顺序重命名它们,那么我就不会遇到重复的名称。我正在复制相同的大约。 40 个文件重复数千次,具体取决于它们出现的顺序list.txt。每个文件的大小在 100KB 到 250KB 之间。

我想按照每个文件列出的顺序将其复制list.txt到另一个文件夹中,并按顺序重命名它们

我用它来将文件复制到新文件夹,它的工作原理是,它没有保留或重命名重复项。

cp `cat list.txt` new-folder/

我使用它来按顺序重命名它们,但它在错误的文件夹中重命名它们

find . -name '*.jpeg' \
| awk 'BEGIN{ a=0 }{ printf "mv %s %04d.jpeg\n", $0, a++ }' \
| bash

我一直在尝试使用此方法将它们结合起来,但没有成功:

cat [filename] | while read line; do [command] "$line"; done

我尝试了很多这样的组合:

cp `cat list.txt` new-folder/ | while read line; do find . -name '*.jpeg' \
| awk 'BEGIN{ a=0 }{ printf "mv %s %04d.jpeg\n", $0, a++ }' \
| bash "$line"; done

我需要这些文件按照 list.txt 的顺序出现在新文件夹中,因为我将在项目的添加日期/创建日期之前使用它们。我可能必须对每一行进行延迟,直到它被复制并重命名。

答案1

不要尝试从文件列表构建 shell 脚本,它很难正确执行,而且几乎总是比直接执行您需要执行的任何内容要困难得多。相反,当您有可用的文件名时,请继续重命名它。

#!/bin/sh
number=1
while IFS= read -r old_name; do
  new_name=$(printf %04d "$number").jpeg
  number=$((number+1))
  mv -- "$old_name" "new-folder/$new_name"
done <list.txt

相关内容