【问题标题】:How to grep/find for a list of file names?如何grep/find文件名列表?
【发布时间】:2018-04-08 00:08:46
【问题描述】:

例如,我有一个文本文档,其中包含我可能在目录中拥有的文件名列表。我想 grep 或使用 find 来找出这些文件名是否存在于特定目录及其子目录中。目前我可以通过find . | grep filename 手动执行此操作,但每次只有一个,当我有超过 100 个文件名时,我需要检查是否有它们,这真的很烦人且耗时。

最好的方法是什么?

【问题讨论】:

    标签: linux grep find


    【解决方案1】:

    xargs 是你想要的。案例如下:

    假设您有一个名为 filenames.txt 的文件,其中包含文件列表

    a.file 
    b.file 
    c.file 
    d.file 
    e.file
    

    只有e.file 不存在。

    终端中的命令是:

    cat filenames.txt | xargs -I {} find . -type f -name {}
    

    这个命令的输出是:

    a.file
    b.file
    c.file
    d.file
    

    也许这会有所帮助。

    【讨论】:

    • 所以作为一个测试,我做了 3 个文件夹,主文件夹,然后是两个子目录457 546 6969 搜索时我遇到了这个问题: $ cat filenames.txt | xargs find find: '6969\r': 没有这样的文件或目录 find: '123\r': 没有这样的文件或目录 find: '234\r': 没有这样的文件或目录 find: '999': 没有这样的文件或目录
    • cat filenames.txt | xargs -I {} find . -type f -name {}xargs应该使用复杂的参数设置
    【解决方案2】:

    如果文件没有移动,自上次更新b 运行以来,通常

    将文件列表读入一个数组并通过定位进行搜索。如果文件名很常见(或作为其他文件的一部分出现),请按基本目录 grep 它们,在哪里可以找到它们:

    < file.lst mapfile filearr
    locate ${filearr[@]} | grep /path/where/to/find
    

    如果文件名可能包含空格或字符,可能会被 bash 解释,则必须采用通常的屏蔽机制。

    【讨论】:

      【解决方案3】:

      一位朋友通过find . | grep -i -Ff filenames.txt帮助我解决了这个问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-22
        • 2014-01-18
        • 2016-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-31
        • 1970-01-01
        相关资源
        最近更新 更多