删除所有文件,除了一些具有常量名称的文件和一些在Unix中包含特殊文件的文件

时间:2019-01-16 00:31:56

标签: unix grep ls rm

我想删除目录中除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")

我的命令有问题吗?

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试使用特定于BASH的extglob语法。 ls|grep在全局范围内不起作用,因为每个模式都需要用|分隔,ls|grep不会发生。做您想要的事的更简单方法是使用外壳程序遍历在您要查找的目录下查找文件。确保您执行以下操作:

  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或更高版本。