在 Linux 上复制目录结构而不复制文件


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

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

在 Linux 上复制目录结构而不复制文件

在 Linux 中,您可以借助多个命令复制任何现有的目录结构和子目录。在这里,我们将复制“Documents”目录结构到“Downloads”目录,但不包括其文件。让我们使用以下 tree 命令考虑“Documents”目录的结构:

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

更新于: 2023年5月18日

2K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.