在 Linux 上复制不包含文件的目录结构

linuxoperating systemopen source更新于 2026/1/29 22:37:17

Linux 中有各种命令可以将目录从一个目标复制到另一个目标。在 Linux 中,您可以使用 cp 命令的 -R 选项递归复制目录,该命令会将源目录及其所有文件复制到目标目录。相反,有时我们只需要将空目录结构复制到另一个目标目录,而不从源目录复制其文件。

如果逐个复制不包含文件的目录结构,则会花费很长时间。在这种情况下,您可以使用 Linux 中的一些命令直接复制不包含文件的空目录结构。本教程将展示在 Linux 上复制不包含文件目录结构的所有可用命令的示例。

在 Linux 上复制不包含文件的目录结构

在 Linux 中,您可以借助一些命令复制任何现有的目录结构及其子目录。在这里,我们将"Documents"目录结构复制到"Downloads"目录,但不复制其文件。让我们使用以下树命令来考虑文档目录的结构 -

~$: 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"定义一个过滤器,过滤规则遵循该过滤器。

  • + − 包含所有目录。

  • - − 排除所有文件。

例如,我们将 Documents 的所有目录复制到 Downloads 目录 −

~$: 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

因此,您的源目录结构将被复制到目标目录,但不包含文件。

find 命令

您可以使用 find 命令和 xargs 命令/-exec 选项将完整目录路径复制到另一个目标目录。首先,显示要复制的目录结构 −

~$: 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 选项来仅检索目录。

tree 和 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 命令进行验证 -

~$: 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 上复制不含文件的目录结构。


相关文章


有用资源