使用find - 删除除了任何一个之外的所有文件/目录(在Linux中)

kin*_*er1 14 linux shell file

如果我们要删除我们使用的所有文件和目录,rm -rf *.

但是如果我想要删除所有文件和目录,除了一个特定的文件,该怎么办?

那有什么命令吗?rm -rf *一次性便于删除,但删除了我最喜欢的文件/目录.

提前致谢

thk*_*ala 30

find 可以成为一个非常好的朋友:

$ ls
a/  b/  c/
$ find * -maxdepth 0 -name 'b' -prune -o -exec rm -rf '{}' ';'
$ ls
b/
$ 
Run Code Online (Sandbox Code Playgroud)

说明:

  • find * -maxdepth 0:选择所有选择的内容*而不降序到任何目录

  • -name 'b' -prune:不要打扰-prune任何符合条件的东西-name 'b'

  • -o -exec rm -rf '{}' ';':呼吁rm -rf其他一切

顺便说一句,另一种可能更简单的方法是移动或重命名你喜欢的目录,这样它就不会这样:

$ ls
a/  b/  c/
$ mv b .b
$ ls
a/  c/
$ rm -rf *
$ mv .b b
$ ls
b/
Run Code Online (Sandbox Code Playgroud)


Thy*_*yag 10

简短的回答

ls | grep -v "z.txt" | xargs rm
Run Code Online (Sandbox Code Playgroud)

细节:

上述命令的思考过程是:

  • 列出所有文件(ls)
  • 忽略一个名为"z.txt"的文件(grep -v"z.txt")
  • 删除z.txt以外的列出文件(xargs rm)

创建5个文件,如下所示:

echo "a.txt b.txt c.txt d.txt z.txt" | xargs touch
Run Code Online (Sandbox Code Playgroud)

列出除z.txt以外的所有文件

ls|grep -v "z.txt"

a.txt
b.txt
c.txt
d.txt
Run Code Online (Sandbox Code Playgroud)

我们现在可以使用xargs实用程序删除(rm)列出的文件:

ls|grep -v "z.txt"|xargs rm
Run Code Online (Sandbox Code Playgroud)

  • 非常优雅的解决方案。简短易懂。它对我有用。 (2认同)