如何在Unix中删除除一个文件之外的所有文件?

Jea*_*ean 13 unix rm

可能重复:
如何删除目录中除某些文件外的所有文件?

如何在Unix中删除除一个(或一些)文件之外的所有文件?

就像是

 rm -rf -ignore myfile.txt *
Run Code Online (Sandbox Code Playgroud)

小智 20

ls * | grep -v dont_delete_this_file | xargs rm -rf 
Run Code Online (Sandbox Code Playgroud)

例子 :

mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5
Run Code Online (Sandbox Code Playgroud)

删除除 'test2' 之外的所有文件:

ls * | grep -v test2 | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)

然后'ls'输出是:

test2
Run Code Online (Sandbox Code Playgroud)

编辑:

感谢您的评论。如果目录包含一些带空格的文件:

mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"
Run Code Online (Sandbox Code Playgroud)

您可以使用(使用 bash):

rm !("test 1"|"test 4")
Run Code Online (Sandbox Code Playgroud)

'ls' 输出:

test 1
test 4
Run Code Online (Sandbox Code Playgroud)

  • 如果文件名中包含空格,则此操作将失败。 (2认同)

小智 8

假设您使用的是 bash shell(最常见的情况),您可以使用否定通配符(路径名扩展)符号:

rm -rf !(myfile.txt)
Run Code Online (Sandbox Code Playgroud)

这使用扩展的通配符,因此您需要先启用它:

shopt -s extglob
Run Code Online (Sandbox Code Playgroud)