相当于 "cp --parents" 只达到一定深度

Equivalent of "cp --parents" to a certain depth only

这是我的问题:

我有一个名为 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 部分实际上 returns 我想复制的内容)

但是,输出格式为 /tmp/home/user/archive/$YYYY/$MM/$DD 而我想要的输出格式是 /tmp/archive/$YYYY/$MM/$DD

有什么解决办法吗? :)

一个选项是 运行 在解析 find 的输出后通过 awk 的系统函数进行复制。这样的解决方案要求 directory/subdirectory 结构在所有情况下都相同:

find /home/user/archive -mtime +1 -type f | awk -F\/ '{ print "mkdir -p /tmp/""/""/"";cp --parents "[=10=] " /tmp/""/""/""/" }'

这将打印您需要为从查找命令找到的每个条目执行的复制命令。确保命令按预期打印(这一步很重要)

一旦您确认命令按预期显示,您可以 运行 通过 awk 的系统函数实际复制命令:

find /home/user/archive -mtime +1 -type f | awk -F\/ '{ system("mkdir -p /tmp/""/""/"";cp --parents "[=11=] " /tmp/""/""/""/") }'