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

我有一个位于“trial”文件夹中的文件file1.txt,其中包含图像文件的位置。我想要读取列表,并将图像文件复制到一个新的文件夹test_folder
file1.txt中的条目如下:
./trial/data/image1.jpg
./trial/data/image2.jpg

等等。

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

尝试

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

我遇到了一个错误:“bash:/trial/file1.txt:没有这个文件或目录”。任何帮助都将不胜感激!

我已经更新了问题,包括这个内容 - 谢谢! - Shane B
3个回答

你遇到的错误是因为你正在读取 /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

非常感谢!那个方法有效。我对Linux非常陌生,所以这真是帮了大忙。 - Shane B

另一种方法是使用xargscp --target-directory=...,方法如下:

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

晚了一些,但是rsync也是一个很好的方法来做这个。
rsync -av --include-from=trial/file1.txt --exclude="*" . ./trial/test_folder
  • 源目录是当前目录,因为file1.txt中的行是相对于当前目录的。
  • 目标目录是新文件夹。
  • 我们排除所有内容,除了与文件中的条目匹配的内容。