如果我们要删除我们使用的所有文件和目录,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)
细节:
上述命令的思考过程是:
例
创建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)