【发布时间】:2023-04-05 17:47:02
【问题描述】:
我想从文本文件中逐行读取以递归查找目标文件夹中的文件。如果找到将该文件复制到另一个目录。下面的脚本在从终端运行sh script.sh 时执行但不执行查找或复制。不显示任何错误,它将为每个循环迭代正确地回显$line 变量字符串。使用实际文件名而不是 $list 变量从终端运行相同的 find 确实可以成功完成任务。
脚本:
script.sh
#!/bin/bash
file="filenames.txt"
while IFS= read line
do
find /Volumes/share/all-files-location -name "$line" -print -exec cp {} /Volumes/share/found-files-location \;
done < "$file"
文件名列表,纯文本:
A1037_MG_1262.jpg
A1037_MG_12621.jpg
A1037_MG_1263.jpg
[11,000 more entries]
想法?
【问题讨论】:
-
这似乎在我的机器上运行良好,将路径和文件名调整为启动驱动器上实际存在的内容。您确定所有路径都正确吗?
-
另外,任何有问题的文件的路径是否包含空格或其他不寻常的字符?
-
要复制的文件中没有空格。将我的脚本调整为 "find ~/Desktop/test-folder/all-web-photos -name "$line" -print -exec cp {} ~/Desktop/test-folder/found \;"也不起作用,再次没有错误。在终端窗口中使用文件名而不是变量运行 find 命令确实可以正确执行,因此我的路径肯定是正确的。
-
输入文件使用什么行结尾? CR、LF、CRLF?
-
输入文件使用CRLF