将子目录从一个目录复制到另一个目录

将子目录从一个目录复制到另一个目录

我需要将一个目录的内容复制到另一个目录。

我只需要复制 1 个子文件夹。

例如;如果我有一个名为““并想复制其中一个名为”的子文件夹(包含其中的所有内容)2015年1月21日“<- 这个名字每天都会变化,我想通过 cronjob 执行这个操作到文件夹”

+ from
    - 21-01-2015 (**this name changes all the time**)
    - month (**this stays always the same**)

我目前正在使用此命令:cp -a /path/from /path/to但此命令会复制文件夹““以及其中的所有东西……

因此当你进入文件夹““它变成了这样:

+ to
    + from
        - 21-01-2015
        - month

而不是我需要的

+ to
    - 21-01-2015

我怎样才能实现这样的目标?

谢谢

答案1

你可以尝试这个命令:

cp -a from/$(ls from | grep ^[0-9][0-9]) to/

答案2

cp -a /path/from/* /path/to 将复制 /path/from 的内容,而不是目录,如果您在 /path/from 中有其他文件/目录,并且只想复制其中一个,您必须想出一个模式来匹配它。

答案3

命令 cp -a /path/from /path/to 的问题在于它将执行递归复制,这意味着它将复制源目录(在您的情况下为“/path/from”)及其下的所有内容。

您需要的是一个命令,用于递归复制“from”中的“21-01-2015”目录。您应该使用的命令是:

cp -a /path/from/21-01-2015 /path/to

请注意,您提到“from”中的目录会更改名称。您没有提到上一个作业中的目录是否保留。如果 /path/from 包含多个子目录,并且您在命令中使用通配符,则您将复制已复制的所有目录(这可能是您想要的,也可能不是)。如果您不介意复制已在上一个 cron 作业中复制的子目录,那么您可以使用以下命令复制以数字开头的任何文件或文件夹(这当然不会复制“month”)

cp -a /path/from/[0-9]* /path/to

如果您不想在每次运行 cronjob 时复制“from”的每个子目录(即,您只想复制自上次 cronjob 以来添加的文件),那么使用 rsync 会更好。您使用的 rsync 命令类似于:

rsync -avz --exclude 'month' /path/from/ /path/to/

但请检查手册页以找到正确的选项来执行您想要的操作(例如,您可能不希望在生产中使用详细选项)。

相关内容