我想删除目录中除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")
我的命令有问题吗?
答案 0 :(得分:0)
您似乎正在尝试使用特定于BASH的extglob
语法。 ls|grep
在全局范围内不起作用,因为每个模式都需要用|
分隔,ls|grep
不会发生。做您想要的事的更简单方法是使用外壳程序遍历在您要查找的目录下查找文件。确保您执行以下操作:
extglob
:shopt -s extglob
globstar
:shopt -s globstar
ls | grep
然后重试:
rm -v !("R1.r"|"R2.r"|"r2.par"|**/*nario*|"sh.sh")
注意:globstar
需要BASH版本4或更高版本。