如何将文件从列表复制到新文件夹?

如何将文件从列表复制到新文件夹?

我有一个文件文件1.txt位于审判包含图像文件位置的文件夹。我想读取列表,并将图像文件复制到新文件夹,测试文件夹

file1.txt 中的条目如下所示:

./trial/data/image1.jpg
./trial/data/image2.jpg

ETC。

我尝试使用类似的问题来解决问题:将文件列表复制/移动到新目录

试图

while read file; do cp "$file" /trial/test_folder; done < /trial/file1.txt

我收到错误“bash: /trial/file1.txt: 没有这样的文件或目录”。任何帮助都非常好!

答案1

您收到的错误是因为您正在读取/trial/file1.txt而不是./trial/file1.txt。这意味着 shell 正在尝试trial在根目录 ( /) 下找到一个名为的目录。如果您想要相对于当前目录的路径,则可以使用:

while read file; do cp "$file" trial/test_folder; done < trial/file1.txt

或者,

while read file; do cp "$file" ./trial/test_folder; done < ./trial/file1.txt

或者,您可以使用完整路径:

while read file; do cp "$file" /home/shane/trial/test_folder; done < /home/shane/trial/file1.txt

答案2

另一种方法是 使用xargscp --target-directory=...

xargs -r <trial/file1.txt cp --target-directory=./trial/test_folder

答案3

虽然有点晚了,但这rsync也是一个很好的方法:

rsync -av --include-from=trial/file1.txt --exclude="*" . ./trial/test_folder
  • 源目录是当前目录,因为其中的行file1.txt是相对于当前目录的。
  • 目标目录是新文件夹。
  • 我们排除所有内容,除了与文件中的条目匹配的内容

相关内容