【问题标题】:Search filenames for a list of patterns and copy to destination在文件名中搜索模式列表并复制到目标
【发布时间】:2019-12-06 22:24:26
【问题描述】:

我在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 文件中的模式找到所有文件,但是如何将它们复制到新文件夹顶部?

【问题讨论】:

  • 您是否尝试将结果通过管道传输到 xargs? "| xargs -I {files} cp {files} /path/to/new/folder"
  • 是否需要处理子目录中的文件。如果是,您是否希望将所有文件复制到flat 目标,还是必须维护层次结构? (即如果有./a/b/c.txt,应该是(1)target/c.txt,还是(2)target/a/b/c.txt

标签: linux bash


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多