直到现在,当我想从列表中收集文件时,我一直在使用包含完整路径并使用的列表:
cat pathlist.txt | xargs -I % cp % folder
但是,我希望能够以递归方式搜索文件夹及其子文件夹,并复制纯文本列表中仅包含文件名(不是完整路径)的所有文件。
我将如何做到这一点?
谢谢!
答案 0 :(得分:1)
假设您的文件名列表包含裸文件名,因为它适合作为参数传递给find -name
,您可以这样做。
sed 's/^/-name /;1!s/^/-o /' pathlist.txt |
xargs -I % find folders to search -type f \( % \) -exec cp -t folder \+
如果您的cp
不支持-t
选项来指定来源之前的目标文件夹,或者您的find
不支持-exec ... \+
,则需要适应这一点。
只是为了解释这里发生了什么,输入
test.txt
radish.avi
:
正在插入
find folders to search -type f \( -name test.txt -o -name radish.avi \
-o name : \) -exec cp -t folder \+
答案 1 :(得分:0)
尝试类似
的内容find folder_to_search -type f | grep -f pattern_file | xargs -I % cp % folder
答案 2 :(得分:0)
使用find命令。
while read line
do
find /path/to/search/for -type f -name "$line" -exec cp -R {} /path/to/copy/to \;
done <plain_text_file_containing_file_names
<强>假设:强>
列表中的文件没有标准名称,例如换行符或特殊字符。
注意:强>
如果列表中的文件具有非标准文件名,则tt将是不同的球赛。有关详细信息,请参阅find manpage并查找-print0
。简而言之,您应该使用空终止字符串进行操作。