首页 > 解决方案 > 在文件名中搜索模式列表并复制到目标

问题描述

我有一个模式列表filenames.txt,我想在文件夹中搜索包含这些名称的文件名。

patterns.txt

254b    
0284ee    
001ty    
288qa

我想在文件夹中搜索文件名中包含任何这些模式的文件名,并将所有找到的文件复制到目标目录。

到目前为止,我找到了一个查看文件的解决方案,如下所示:

set -f; find ./ -type f \( $(printf -- ' -o - iname *%s*' $(cat patterns.txt) | cut -b4-) \); set +f

我可以根据文件上的模式找到所有文件patterns.txt,但是如何将它们复制到新文件夹顶部?

标签: linuxbash

解决方案


假设目标文件夹不需要维护原始层次结构(或者输入目录没有子目录),使用 find、grep 和 xargs 应该可以工作:

find . -type f -print0 |
  grep -z -i -F -f patterns.txt |
  xargs -0 -s1000 cp -t /new/folder

该序列具有批量复制的优势 - 对于大量文件将是有效的。使用 NUL 分隔文件名应允许文件名中包含任何特殊字符。


推荐阅读