Linux 命令行与 shell 脚本编程大全 (3rd ed)(35):基本的 bash shell 命令 3.7.2

阅读数:10 2019 年 11 月 17 日 15:26

Linux命令行与shell脚本编程大全(3rd ed)(35):基本的bash shell命令 3.7.2

内容简介
这是一本关于 Linux 命令行与 shell 脚本编程的全方位教程,主要包括四大部分:Linux 命令行,shell 脚本编程基础,高级 shell 脚本编程,如何创建实用的 shell 脚本。本书针对 Linux 系统的新特性进行了全面更新,不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料。通过本书的学习,你将轻松写出自己的 shell 脚本。

(删除目录)

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

复制代码
$ touch New_Dir/my_file
$ ls -li New_Dir/
total 0
294561 -rw-rw-r-- 1 christine christine 0 May 22 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 May 22 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
$

这种方法虽然可行,但很难用。注意,你依然要确认每个文件是否要被删除。如果该目录有很多个文件和子目录,这将非常琐碎。

说明 对rm命令而言,-r参数和-R参数的效果是一样的。-R参数同样可以递归地删除目录中的文件。shell 命令很少会就相同的功能采用不同大小写的参数。

一口气删除目录及其所有内容的终极大法就是使用带有-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命令既没有警告信息,也没有声音提示。这肯定是一个危险的工具,尤其是在拥有超级用户权限的时候。务必谨慎使用,请再三检查你所要进行的操作是否符合预期。

说明 在上面的例子中,我们使用了tree工具。它能够以一种美观的方式展示目录、子目录及其中的文件。如果需要了解目录结构,尤其是在删除目录之前,这款工具正好能派上用场。不过它可能并没有默认安装在你所使用的 Linux 发行版中。请参阅第 9 章,学习如何安装软件。

在前面几节中,你看到了如何管理文件和目录。到此为止,除了如何查看文件内容,我们已经讲述了你所需要的有关文件的全部知识。

评论

发布