bash shell:递归搜索文件夹和子文件夹以查找列表中的文件

时间:2016-05-12 14:55:38

标签: bash shell recursion

直到现在,当我想从列表中收集文件时,我一直在使用包含完整路径并使用的列表:

cat pathlist.txt | xargs -I % cp % folder

但是,我希望能够以递归方式搜索文件夹及其子文件夹,并复制纯文本列表中仅包含文件名(不是完整路径)的所有文件。

我将如何做到这一点?

谢谢!

3 个答案:

答案 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。简而言之,您应该使用空终止字符串进行操作。