【问题标题】:Remove all files except some with constant name and some containing a special in unix删除所有文件,除了一些具有常量名称和一些包含 unix 中的特殊名称的文件
【发布时间】:2019-06-10 01:15:34
【问题描述】:

我想删除目录中的所有文件,但 UNIX 中的一些文件除外。我想要的文件有一个已知的名称,而另一部分,我正在使用 ls|grep 命令。但是 ls | grep 仅在出现一次而不是在多次出现时起作用。与 find|grep 相同。这是我的命令:

rm -v !("R1.r"|"R2.r"|"r2.par"|$(ls|grep nario)|"sh.sh")

rm -v !("R1.r"|"R2.r"|"r2.par"|$(find|grep nario)|"sh.sh")

我的命令有问题吗???

【问题讨论】:

  • 您的ls | grep*nario* 的作用相同;那是你的意图吗?你提到“包含”——我想知道你是不是指ls | xargs grep -l nario /dev/null(如果xargs 运行的命令行之一中只有一个文件,那么提到/dev/null 可以防止出现问题)。请注意,通常最好避免过滤来自ls 的输出。\

标签: unix grep ls rm


【解决方案1】:

您似乎正在尝试使用 BASH 特定的 extglob 语法。 ls|grep 在 glob 中间不起作用,因为每个模式都需要用 | 分隔,ls|grep 不会发生这种情况。做你想做的更简单的方法是使用 shell globbing 来查找你正在寻找的目录下的文件。请确保执行以下操作:

  1. 正在使用 BASH
  2. 启用extglobshopt -s extglob
  3. 启用globstarshopt -s globstar
  4. 使用文件通配而不是ls | grep

然后再试一次:

rm -v !("R1.r"|"R2.r"|"r2.par"|**/*nario*|"sh.sh")

注意:globstar 需要 BASH 版本 4 或更高版本。

【讨论】:

    猜你喜欢
    • 2019-12-22
    • 1970-01-01
    • 2012-12-11
    • 2013-06-30
    • 2018-05-09
    • 2013-03-12
    • 2013-05-04
    • 2015-10-31
    • 2011-09-27
    相关资源
    最近更新 更多