如何复制目录并在同一命令中重命名?

All*_*onC 31 cp mv

目前,我正在运行这两个命令来创建目录的快速备份。有没有办法将这两个命令合二为一,以便我在一个命令中复制和重命名新目录?

#cp -R /tf/Custom_App /tf/Custom_App_backups/
#mv /tf/Custom_App_backups/Custom_App /tf/Custom_App_backups/Custom_App_2017-12-21
Run Code Online (Sandbox Code Playgroud)

ilk*_*chu 43

你应该能够做到

cp -R /tf/Custom_App /tf/Custom_App_backups/Custom_App_2017-12-21
Run Code Online (Sandbox Code Playgroud)

但是,如果目标目录已经存在,这会将源路径的最后一部分附加到目标路径,创建 /tf/Custom_App_backups/Custom_App_2017-12-21/Custom_App,然后复制其中的其余部分。

为了防止这种情况,请使用/tf/Custom_App/.作为源。当然,在这种情况下rm -r /tf/Custom_App_backups/Custom_App_2017-12-21,如果您不希望在复制后将旧文件放在那里,您可能希望首先这样做。

/some/dir/some/dir/.之前在cp 中讨论过的区别在. (dot) 或 .. (dot dot) 是源目录

  • 将“.”作为源目录传递的另一种方法是使用“-T”标志来告诉“cp”覆盖目标而不是在其中创建新成员。 (2认同)
  • `/tf/Custom_app/.` 技巧正是我所需要的。 (2认同)
  • @flow2k,尤其是 GNU 实用程序具有大量非标准选项,其中许多非常有用。`cp -a` 当然也出现在例如 [FreeBSD](https://www.freebsd.org/cgi/man.cgi?cp) 和 [OpenBSD](https://man.openbsd.org/cp. 1) 但它仍然不是标准功能,即 [POSIX] 未指定(http://pubs.opengroup.org/onlinepubs/9699919799.2018edition/utilities/cp.html)。(前面提到的`cp -T` 似乎是一种 GNU 主义,它不在 POSIX 中,据我所知也不在 BSD 中。) (2认同)

Abe*_*ejo 5

或者,您可以这样做:

mkdir /tf/Custom_App_backups/Custom_App_2017-12-21 # prepare the target location
cp -R /tf/Custom_app/. /tf/Custom_App_backups/Custom_App_2017-12-21 # copy only the contents
Run Code Online (Sandbox Code Playgroud)

这将允许您预先指定您的自定义位置。另请注意,它使用后缀/.“这”允许您仅复制内容并排除其包含的文件夹 - 在本例中为文件夹Custom_app