bash - 仅在一定深度上等效于“cp --parents”
问题描述
这是我的问题:
我有一个名为archive
的文件夹,其中包含以下格式的许多子目录和文件:
/home/user/archive/$YYYY/$MM/$DD
我想复制一些特定的文件,/tmp
同时保留部分目录树。到目前为止,我想出了
find /home/user/archive -mtime +1 -type f -exec cp --parents {} /tmp;
(该find ... -mtime +1 -type f
部分实际上返回了我想要复制的内容)
但是,输出是格式/tmp/home/user/archive/$YYYY/$MM/$DD
,而我想要的输出格式是/tmp/archive/$YYYY/$MM/$DD
有什么解决办法吗?:)
解决方案
一种选择是在解析 find 的输出后通过 awk 的系统函数运行副本。这样的解决方案将要求目录/子目录结构在所有情况下都相同:
find /home/user/archive -mtime +1 -type f | awk -F\/ '{ print "mkdir -p /tmp/"$4"/"$5"/"$6";cp --parents "$0 " /tmp/"$4"/"$5"/"$6"/"$7 }'
这将打印您需要为从 find 命令找到的每个条目执行的复制命令。确保命令按预期打印(这一步非常重要)
一旦您确认命令按预期显示,您可以通过 awk 的系统函数运行实际的复制命令:
find /home/user/archive -mtime +1 -type f | awk -F\/ '{ system("mkdir -p /tmp/"$4"/"$5"/"$6";cp --parents "$0 " /tmp/"$4"/"$5"/"$6"/"$7) }'