我有这样的目录结构:m/n/o/p/q/r/s/t。
我想找到按名称“r”匹配的目录,并从查找结果的父目录递归复制内容(即本例中的“q/r/s/t” - 使用 'cp 可以实现什么 - rq/r <dir_location>') 到另一个位置。
就像是:
find m/n/o/p -type d -name "r" -exec cp -r "../{}" /<folder_to_copy_into> \;
我尝试过使用 -printf %h 和 -maxdepth 进行实验,但我不确定我的语法是否正确。我不确定我是否应该进入另一个发现以获得我想要的结果。 (目标是仅从 find-results 中的一个父目录递归复制到另一个目录位置)。
只要我能找到名为“r”的目录,我就想将所有内容从 r 的父目录递归复制到新的目录位置。(例如:如果我有 m/n/o/p/q/r/s/t,我希望将“q/r/s/t”递归复制到新的目录位置)。
答案1
您可以将您替换-exec
为 bash 命令字符串:
.... -exec bash -c 'cp -r $(dirname $0) /target/' '{}' \;
请考虑@KamilMaciorowski 的评论:有点不清楚你想要提取什么。所以d1
在这样的目录结构中搜索
└ a
└ b
├ c1
│ └ d1
│ └ d2
│ └ d3
├ c2
└ c3
上面的内容将复制并包含c1
在内,而不仅仅是.d2
d3
d1
答案2
这对我有用:
find m/n/o/p -mindepth 1 -maxdepth 1 -type d -exec [ -d {}/r ] ';' -exec cp -r {} <folder_to_copy_into> \;)