删除目录之所以很棘手,是有原因的。删除目录时,很有可能会发生一些不好的事情。shell会尽可能防止我们捅娄子。删除目录的基本命令是rmdir。

$ touch New_Dir/my_file 
$ ls -li New_Dir/
total 0 
294561 -rw-rw-r-- 1 christine christine 0 Nov 30 09:52 my_file 
$ 
$ rmdir New_Dir 
rmdir: failed to remove 'New_Dir': Directory not empty 
$ 

默认情况下,rmdir命令只删除空目录。因为我们在New_Dir目录下创建了一个文件my_file,所以rmdir命令拒绝删除目录。
要解决这一问题,得先把目录中的文件删掉,然后才能在空目录上使用rmdir命令。

$ rm -i New_Dir/my_file 
rm: remove regular empty file 'New_Dir/my_file'? y 
$ 
$ rmdir New_Dir 
$ 
$ ls -ld New_Dir 
ls: cannot access New_Dir: No such file or directory 

rmdir并没有-i选项来询问是否要删除目录。这也是为什么说rmdir只能删除空目录还是有好处的原因。
也可以在整个非空目录上使用rm命令。使用-r选项使得命令可以向下进入目录,删除其中的文件,然后再删除目录本身。

$ ls -l My_Dir 
total 0 
-rw-rw-r-- 1 christine christine 0 Nov 30 10:02 another_file 
$ 
$ rm -ri My_Dir 
rm: descend into directory 'My_Dir'? y 
rm: remove regular empty file 'My_Dir/another_file'? y 
rm: remove directory 'My_Dir'? y 
$ 
$ ls -l My_Dir 
ls: cannot access My_Dir: No such file or directory 
$ 

这种方法同样可以向下进入多个子目录,当需要删除大量目录和文件时,这一点尤为有效。

$ ls -FR Small_Dir 
Small_Dir: 
a_file b_file c_file Teeny_Dir/ Tiny_Dir/ 
Small_Dir/Teeny_Dir: 
e_file 
Small_Dir/Tiny_Dir: 
d_file 
$ 
$ rm -ir Small_Dir 
rm: descend into directory 'Small_Dir'? y 
rm: remove regular empty file 'Small_Dir/a_file'? y 
rm: descend into directory 'Small_Dir/Tiny_Dir'? y
rm: remove regular empty file 'Small_Dir/Tiny_Dir/d_file'? y 
rm: remove directory 'Small_Dir/Tiny_Dir'? y 
rm: descend into directory 'Small_Dir/Teeny_Dir'? y 
rm: remove regular empty file 'Small_Dir/Teeny_Dir/e_file'? y 
rm: remove directory 'Small_Dir/Teeny_Dir'? y 
rm: remove regular empty file 'Small_Dir/c_file'? y 
rm: remove regular empty file 'Small_Dir/b_file'? y 
rm: remove directory 'Small_Dir'? y 
$ 
$ ls -FR Small_Dir 
ls: cannot access Small_Dir: No such file or directory 
$ 

这种方法虽然可行,但很难用,依然要确认每个文件是否要被删除。如果该目录有很多个文件和子目录,这将非常琐碎。
一口气删除目录及其所有内容的终极大法就是使用带有-r参数和-f参数的rm命令。

$ tree Small_Dir 
Small_Dir 
├─ a_file 
├─ b_file 
├─ c_file 
├─ Teeny_Dir 
│ └─ e_file 
└─ Tiny_Dir 
 └─ d_file 
2 directories, 5 files 
$ 
$ rm -rf Small_Dir 
$ 
$ tree Small_Dir 
Small_Dir [error opening dir] 
0 directories, 0 files 
$ 

rm -rf命令既没有警告信息,也没有声音提示。这肯定是一个危险的工具,尤其是在拥有超级用户权限的时候。务必谨慎使用,请再三检查所要进行的操作是否符合预期。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐