我有一个文件文件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
另一种方法是 使用xargs
:cp --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
是相对于当前目录的。 - 目标目录是新文件夹。
- 我们排除所有内容,除了与文件中的条目匹配的内容