在 Linux 上管理目录很容易,但是当您需要创建、清空或删除大型、复杂的目录结构时,这个过程会变得更加复杂。这篇文章将带你从最基本的命令到一些相当复杂的命令,这些命令可以帮助简化这个过程。
mkdir
mkdir命令可以像这样创建一个目录:
$ mkdir newdir
它还可以使用如下命令创建复杂的目录和子目录结构。-p参数告诉命令创建基目录(如果它不存在)。
显示的命令中出现的每组目录名称(如{1,2,3} 和{docs,script})将导致在该级别创建一系列子目录。
$ mkdir -p newdir/{1,2,3}/{docs,scripts}
只需向mkdir命令添加额外的/{dir1,dir2}类型规范,即可根据需要向目录结构添加任意多的级别。如果添加-v(详细)选项,该命令将显示每个创建的目录。
$ mkdir -pv newdir/{1,2,3}/{docs,scripts} mkdir: created directory 'newdir' mkdir: created directory 'newdir/1' mkdir: created directory 'newdir/1/docs' mkdir: created directory 'newdir/1/scripts' mkdir: created directory 'newdir/2' mkdir: created directory 'newdir/2/docs' mkdir: created directory 'newdir/2/scripts' mkdir: created directory 'newdir/3' mkdir: created directory 'newdir/3/docs' mkdir: created directory 'newdir/3/scripts'
您可以在使用递归ls命令设置目录结构后查看目录结构,如下所示,它显示每个级别的目录:
$ ls -lR newdir newdir: total 12 drwxr-xr-x. 4 shs shs 4096 Dec 29 11:12 1 drwxr-xr-x. 4 shs shs 4096 Dec 29 11:12 2 drwxr-xr-x. 4 shs shs 4096 Dec 29 11:12 3 newdir/1: total 8 drwxr-xr-x. 2 shs shs 4096 Dec 29 11:12 docs drwxr-xr-x. 2 shs shs 4096 Dec 29 11:12 scripts newdir/1/docs: total 0 newdir/1/scripts: total 0 newdir/2: total 8 drwxr-xr-x. 2 shs shs 4096 Dec 29 11:12 docs drwxr-xr-x. 2 shs shs 4096 Dec 29 11:12 scripts newdir/2/docs: total 0 newdir/2/scripts: total 0 newdir/3: total 8 drwxr-xr-x. 2 shs shs 4096 Dec 29 11:12 docs drwxr-xr-x. 2 shs shs 4096 Dec 29 11:12 scripts newdir/3/docs: total 0 newdir/3/scripts: total 0
tree
查看新创建的目录结构的另一种可能更令人满意的方法是使用tree命令,它以一种非常容易理解的方式显示复杂目录的结构,如下所示:
$ tree newdir newdir ├── 1 │ ├── docs │ └── scripts ├── 2 │ ├── docs │ └── scripts └── 3 ├── docs └── scripts 9 directories, 0 files
将文件添加到新目录后,树命令也会显示这些文件。
$ tree newdir/1 newdir/1 ├── docs │ └── notes <== new file └── scripts 2 directories, 1 file
touch
touch命令可用于创建新文件或更新现有文件的时间戳。要将空文件添加到newdir/2/docs目录,您可以使用如下命令:
$ touch newdir/2/docs/notes
使用 /dev/null
要清空文件,您可以使用如下所示的命令将/dev/null重定向到该文件。在命令序列中,我们列出当前文件,使用/dev/null清空它,然后再次列出它以验证它是否已被清空。
$ ls -l newdir/1/docs/notes -rw-r--r--. 1 shs shs 139 Dec 29 11:42 newdir/1/docs/notes $ cat /dev/null > newdir/1/docs/notes $ ls -l newdir/1/docs/notes -rw-r--r--. 1 shs shs 0 Dec 29 11:43 newdir/1/docs/notes
find
您可以使用find命令递归定位和显示文件或目录。在下面的命令中,我们使用find来显示newdir目录结构中的文件。添加-ls可提供包含文件详细信息的长列表。
$ find newdir -type f newdir/2/docs/notes newdir/1/docs/notes $ find newdir -type f -ls 5782884 0 -rw-r--r-- 1 shs shs 0 Dec 29 11:46 newdir/2/docs/notes 5782883 0 -rw-r--r-- 1 shs shs 0 Dec 29 11:43 newdir/1/docs/notes
移动到一个目录然后再返回
如果您使用cd命令移动到新目录结构中任何位置的目录,您可以 使用cd –命令返回到您键入cd命令的目录,如下所示:
$ pwd /home/shs/newdir $ cd 1/docs $ ls -l total 0 -rw-r--r--. 1 shs shs 0 Dec 29 11:43 notes $ cd - /home/shs/newdir
cd –命令总是将您带回到您在文件系统中键入之前的cd命令之前所在的位置。
删除复杂的目录结构
要删除复杂的目录结构,假设您具有这样做的适当权限,只需使用如下所示的递归rm命令即可。
$ rm -rf newdir $ ls -ld newdir ls: cannot access 'newdir': No such file or directory
该目录及其所有内容将被删除。
使用脚本
如果使用正确的命令,创建复杂的目录结构、进行更改并最终删除它会很容易。如果您需要经常创建或替换特定的结构,那么使用脚本可以为您省去很多麻烦。这是一个示例脚本,它将创建一个特定的结构或根据需要替换它。
#!/bin/bash if [ $# == 0 ] then echo -n "dirname> " read dirname else dirname=$1 fi if [ ! -d $dirname ]; then mkdir -p $dirname/{users,files,notes} tree $dirname else echo "$dirname exists. Remove it first? [y,n]" read ans if [ $ans == 'y' ] then rm -rf $dirname mkdir -p $dirname/{users,files,notes} tree $dirname else echo ok -- $dirname left as is fi fi
本文由 @我是pm 发布于弱电智能网 。
题图来自Unsplash,基于CC0协议
内容观点仅代表作者本人,弱电智能网平台仅提供信息存储空间服务。
如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
文章名称:《在 Linux 上创建和删除目录结构》
文章链接:https://www.ruodian360.com/tech/sytemops/40768.html
添加微信ydian188免费入群,记得备注“弱电智能网”。