答案1
ls * | grep -v dont_delete_this_file | xargs rm -rf
例子 :
mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5
删除除“test2”之外的所有文件:
ls * | grep -v test2 | xargs rm -rf
然后‘ls’输出是:
test2
编辑:
感谢您的评论。如果目录包含一些带空格的文件:
mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"
您可以使用(使用 bash):
rm !("test 1"|"test 4")
‘ls’输出:
test 1
test 4
答案2
假设您正在使用 bash shell(最常见的情况),则可以使用否定通配符(路径名扩展)符号:
rm -rf !(myfile.txt)
这使用了扩展的通配符,因此您需要先启用它:
shopt -s extglob
答案3
cp myfile.txt somewhere_else;
rm -rf *
cp somewhere_else/myfile.txt .