【问题标题】:How to exclude files using ls?如何使用 ls 排除文件?
【发布时间】:2015-05-27 14:33:24
【问题描述】:

我正在使用我编写的 python 脚本从ls 获取一些标准输入,并将数据加载到该路径描述的文件中。它看起来像这样:

    ls -d /path/to/files/* | python read_files.py

这些文件根据其中的数据具有特定的名称结构,但都存储在同一目录中。我要使用的文件具有名称结构A<fileID>_###.txt(其中### 总是一些3 位数字)。我只需将上面的内容稍微更改为ls -d /path/to/files/A*,就可以仅获取以A开头的文件。但是,有些文件有一个名为 B 的后缀标志(因此文件看起来像 A<fileID>_###B.txt),我不想包含这些。

所以,我的问题是,有没有办法排除那些以...B.txt 结尾的文件(或只包括以数字结尾的文件)?我想到了一些大意的东西:

    ls -d /path/to/file/R*%d.txt

只包含以数字结尾且后跟文件扩展名的文件,但找不到任何此类文档。

【问题讨论】:

  • 如果您的 python 脚本接受文件列表作为参数,而不是通过标准输入传递它们,这将更有用。这将使您能够使用使用扩展 glob 的解决方案。
  • 你必须使用ls吗?使用find,您可以使用-regex 选项以及模式的逻辑组合。

标签: bash ls


【解决方案1】:

你可以试试这个:ls A*[^B].txt

【讨论】:

  • 工作完美,完全按照我的要求完成,并且不需要更改我已经完成的任何事情,这就是我将其标记为已接受答案的原因
  • 这个外壳是特定的。我有文件,其中一些带有下划线: 510 ==> ls lib/Inventory/*[^_]* | wc 224 226 7495 ~/webwork/sftf 511 ==> ls lib/Inventory/* |厕所 224 226 7495
【解决方案2】:

extended globbing

shopt -s extglob
ls R*!(B).txt

【讨论】:

    猜你喜欢
    • 2016-08-13
    • 2019-05-07
    • 2017-11-25
    • 1970-01-01
    • 2021-09-16
    • 2018-12-20
    • 2019-11-09
    • 2017-03-04
    • 1970-01-01
    相关资源
    最近更新 更多