【问题标题】:exclude certain files from files found by ls从 ls 找到的文件中排除某些文件
【发布时间】:2021-09-16 04:20:50
【问题描述】:

在我的当前目录中有一些文件和文件夹,例如:

data
log.txt
info.txt
process_data.sh

如何从ls输出中排除目录data和文件log.txt

我试过了: ls |grep -v data |grep -v log.txt 但此命令也排除了process_data.sh,因为它的名称中包含data

我试过了: ls --ignore="data" 只是尝试先排除data,但收到错误:

ls: illegal option -- -
usage: ls [-@ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1%] [file ...]

这可能表明--ignore 在我的操作系统中是不合法的。我用的是mac。

【问题讨论】:

    标签: macos ls


    【解决方案1】:

    我建议使用 循环 来检查目录中的文件,而不是最不可靠的“ls”输出(例如“for f in *; do grep .. done)。

    但要忠于您的实际问题:grep 的 -w 标志(整个单词)和 -E 标志(扩展表达式)在这里是您的朋友,应该帮助您的精确努力:

    ls | grep -vw -E ‘data|log.txt’
    

    【讨论】:

      【解决方案2】:

      您可以将ls 的输出通过管道传输到PerlAwk

      ls | perl -ne 'print unless /\bdata\b/ or /log.txt/'
      
      ls | awk '!/\<data\>/ && !/log.txt/'
      

      (在您的 Awk 版本中,这个 awk 命令很有可能无法按预期工作。在这种情况下,只需使用 Perl。)

      编辑:有一种使用 grep 的方法:

      ls | grep -Ewv 'data|log.txt'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多