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


15

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

#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

1
cp -R /tf/Custom_App /tf/Custom_App_backups/Custom_App_2017-12-21
jesse_b

如何为这两件事定义别名或函数;)
LinuxSecurityFreak

Answers:


21

你应该能够做到

cp -R /tf/Custom_App /tf/Custom_App_backups/Custom_App_2017-12-21

但是,如果目标目录已经存在,这会将源路径的最后一部分附加到目标路径,从而创建 /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中讨论过,当时表现很怪异。(点)或..(点)是源目录


.作为源目录传递的一种替代方法是使用该-T标志告知cp覆盖目标,而不是在目标内部创建新成员。
Toby Speight

@TobySpeight,...在GNU中cp
ilkkachu

1
/tf/Custom_app/.技巧是我需要的。
Martin Bonner

cp -a也可以。
flow2k

1
@ flow2k,特别是GNU实用程序具有大量非标准选项,其中许多非常有用。cp -a当然也出现在FreeBSDOpenBSD中,但是它仍然不是标准功能,即POSIX未指定。(cp -T据我所知,前面提到的似乎是一种GNUism,它不在POSIX中,也不在BSD中。)
ilkkachu

1

或者,您可以这样做:

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

这将允许您预先指定您的自定义位置。另外,请注意,它使用后缀。/.这使您只能复制内容并排除其包含的文件夹-在这种情况下为Custom_app文件夹。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.