复制文件并同时创建目标目录

我们通常使用以下命令将文件从一个位置复制到另一个现有位置 cprsync, 和 scp 等等。如果目标位置不存在,我们首先创建它,然后将文件复制到该新创建的位置。 到目前为止,这是我通常从命令行将文件从一个位置复制到另一位置的方式。 您是否知道我们可以复制文件并自动创建目标目录(如果该目录不存在)? 不? 没问题! 在本指南中,我们将了解如何在Linux中使用单个命令同时复制文件和创建目标目录。

请注意,我不是在谈论结合两个命令。 例如,任何人都可以通过组合以下两个命令来做到这一点:

$ mkdir -p destination && cp source_file destination

但是,这不是一个命令。 这里我们使用了两个命令,即 mkdircp。 它实际上是单线命令。 现在,让我展示如何仅使用一个命令来完成相同的任务。

在Linux中同时复制文件并创建目标目录

我们可以使用三种不同的方法来做到这一点。 首先,我们将了解如何使用 install 命令。

方法1-使用 install 命令

install 命令将文件复制到Linux中您选择的任何目标位置。 它专门用于构建系统之类的目的,例如 automake。 它是GNU coreutils的一部分,因此您不需要安装它。

复制文件并使用以下命令在同一目录中创建目标目录 install 命令,只需运行:

$ install -D source-file destination-directory

例子:

以下命令复制一个名为 sk.txt 到名为 ostechnix。 请注意,目标目录不存在。 我们将使用以下命令同时复制文件并创建目标目录 install 如下命令:

$ install -D sk.txt ostechnix/sk.txt

验证文件是否已复制到 ostechnix 通过列出目录内容 ls 命令:

$ ls ostechnix/
sk.txt

使用install命令同时复制文件并创建目标目录

看? 我之前没有创建目标目录。 install命令自动创建目录并将文件保存在其中。

方便吧? 的确! 这是 install 命令。 可以在shell脚本中使用它。

此方法有一些限制。 您必须在目标位置的末尾提及源文件名。 如果您未指定文件名, install 命令不会将其复制并显示以下错误:

$ install -D sk.txt ostechnix/
install: target 'ostechnix/' is not a directory: No such file or directory

您一次只能复制一个文件。 无法使用以下方法将多个文件复制到多个目标 install 命令。

我们还可以使用复制文件并同时更改所有权,权限 install 命令,如以下指南中所述。

  • 如何复制文件并同时更改所有权和权限

有关install命令的更多详细信息,请参阅其手册页。

$ man install

方法2-使用 cp 命令

通常,我们使用 cp 命令将文件从一个地方复制到另一个地方。 这 cp 命令有一个名为 --parents 这样我们就可以复制源文件的整个目录结构并将其保存在目标位置。

例如,让我们说, sk.txt 文件保存在 ~/Downloads 目录,您想将其复制到 ~/Documents 目录。 如果您使用 cp 来自的命令 ~/Downloads~/Documents,文件将保存在这样的目录结构中-> ~/Documents/Downloads/sk.txt

让我们实时进行操作,看看会发生什么。

$ cp --parents Downloads/sk.txt ~/Documents/

现在运行 tree 命令检查 ~/Documents 目录的内容:

$ tree Documents/
Documents/
└── Downloads
    └── sk.txt

1 directory, 1 file

使用cp命令同时复制文件并创建目标目录使用cp命令同时复制文件并创建目标目录

请记住,我们没有在 ~/Documents 地点。 这 --parents 的选项 cp 命令保留了源文件的目录结构。

不像 install 命令,您无需在目标目录的末尾指定文件名。

这与我们的主题没有直接关系。 但是,那 cp 该命令自动创建目标目录,即保留源文件的目录结构。

方法3-使用 rsync 命令

Rsync 是在本地和远程目录之间复制和备份数据的理想解决方案。 要使用rsync命令同时复制文件并创建目标目录,请运行:

$ rsync sk.txt ostechnix/

目录在哪里叫 ostechnix 不必存在。 Rsync将自动创建它并将源文件保存在其中。

使用rsync命令同时复制文件并创建目标目录使用rsync命令同时复制文件并创建目标目录

在这三个命令中,我更喜欢 install 命令。 因为,我可以使用以下方式创建嵌套目录(另一个目录中的目录) install 命令。 这 cprsync 据我所知,命令只能创建一个目录。 如果我错了,请纠正我。

相关阅读:

  • 复制文件或目录时如何保持所有权和文件权限不变

复制文件cp命令安装命令LinuxLinux基础Linux命令Linux tipsrsync命令

Sidebar