我需要将一个目录的内容复制到另一个目录。
我只需要复制 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/
但请检查手册页以找到正确的选项来执行您想要的操作(例如,您可能不希望在生产中使用详细选项)。