在 Linux 上复制没有文件的目录结构
Linux 中有多种命令可将目录从一个目的地复制到另一个目的地。在 Linux 中,您可以使用 cp 命令的 -R 选项以递归方式复制目录,该命令将源目录(包括其所有文件)复制到目标。相反,有时我们需要仅将空目录结构复制到不同的目标目录,而不从源目录复制其文件。
如果没有文件的话,将目录结构一一复制的话,会花费很长时间。这种情况下,可以使用Linux中的一些命令,直接复制空目录结构,而不需要文件。本教程将展示在 Linux 上复制不带文件的目录结构的所有可用命令的示例。
在 Linux 上复制没有文件的目录结构
在 Linux 中,您可以借助多个命令复制任何现有的目录结构和子目录。在这里,我们将“文档”目录结构复制到“下载”目录(不包括其文件)。让我们使用以下树命令考虑文档目录的结构 -
~$: tree -a Documents
Documents
|__ dir1
| |__sample1.txt
|__ dir2
| |__ dir3
| |__ example.txt
|__ sample2
|__ sample3
3 directories, 4 files
上面的输出显示 Documents 目录有 3 个子目录和 4 个文件。现在,我们将仅将这 3 个目录复制到另一个位置,而不复制任何文件。在这种情况下,我们可以使用三个命令 -
rsync 命令
rsync 是一个功能强大的命令,可将文件从源复制到目标。您可以使用此实用程序复制目录结构。
~$: rsync -av -f"+ */" -f"- *" " <source> <destination>"
在上面的命令中,我们使用;
-a - 用于存档复制。
-v - 查看 rsync 命令的详细日志。
-f - 每个'f'定义一个过滤器,过滤规则服从过滤器。
+ - 包括所有目录。
- - 排除所有文件。
例如,让我们将文档的所有目录复制到下载目录 -
~$: rsync -av -f"+ */" -f"- *" " /home/prateek/Documents Downloads"
sending incremental file list
Documents/
Documents/dir1/
Documents/dir2/
sent 142 bytes received 28 bytes 340.00 bytes/sec
total size is 0 speedup is 0.00
如果您使用的是旧版本的 rsync,那么您可以使用以下命令 -
~$: rsync -av --include='*/' --exclude='*' /home/prateek/Documents Downloads
因此,您的源目录结构将被复制到没有文件的目标目录。
查找命令
您可以使用带有 xargs 命令/-exec 选项的 find 命令将完整目录路径复制到另一个目标。首先,显示要复制的目录结构 -
~$: find Documents -type d
Documents
Documents/dir2
Documents/dir2/dir3
Documents/dir1
要复制没有文件的目录结构,您必须使用 xargs 命令通过管道传输上述命令,如下所示 -
~$: find Documents -type d | xargs -I{} mkdir -p "$HOME/Downloads/{}"
或者,您可以使用 find 命令的 -exec 参数复制不带文件的目录结构,并获得相同的结果。
~$: find Documents -type d -exec mkdir -p "$HOME/Downloads/{}" \;
这里我们使用 -type d 选项仅检索目录。
树和 xargs 命令
在Linux中,您可以使用tree命令以树状格式列出目录的内容。向此命令添加标志允许您将目录路径显示为输出,而无需扩展其文件。
~$: tree -dfi --noreport Documents
Documents
Documents/dir1
Documents/dir2
Documents/dir2/dir3
在上面的命令中 -
-d - 仅打印目录。
-f - 打印完整路径。
-i - 以树格式呈现输出。
-noreport - 抑制输出末尾的摘要报告
现在,让我们将上述命令通过管道传输到 xargs 命令。它可以从先前执行的命令或系统用户获取标准输入来执行和构建命令行 -
~$: tree -dfi --noreport dir1 | xargs -I{} mkdir -p "$HOME/Downloads/{}"
这里我们使用 mkdir -p 命令将检索到的目录路径重建为新的目录路径。
验证复制的目录结构
您可以使用上述任何方法复制不带文件的目录结构,并借助以下树命令进行验证 -
~$: tree -dfi --noreport dir1 | xargs -I{} mkdir -p "$HOME/Downloads/{}"
~$: tree -a $HOME/Downloads/Documents
/home/prateek/Downloads/Documents
|__dir1
|__dir2
|__dir3
3 directories, 0 files
正如您所看到的,系统已将三个没有任何文件(零文件)的目录复制到新位置。
结论
在本文中,我们解释了在 Linux 上复制没有文件的目录结构的三个命令。我们还使用了一些示例来解释 rsync、find 和 xargs 命令。复制目录非常简单,您可以使用上述任何一种方法在 Linux 上复制没有文件的目录结构。