使用“parents”命令可以工作,但它会复制完整的目录结构,而我只需要保留最后一个目录
find /tmp/data/ -type f -name "*.txt" -exec cp --parents {} /u01/ABC/ \;
我得到的输出:
/u01/ABC/tmp/data/a/1.txt
/u01/ABC/tmp/data/b/1.txt
/u01/ABC/tmp/data/c/1.txt
我需要的输出:
/u01/ABC/a/1.txt
/u01/ABC/b/1.txt
/u01/ABC/c/1.txt
答案1
你可以sh -c
在你的find -exec
命令中使用,然后你有更多的控制权,例如做这样的事情:
find ... -exec sh -c '
target="/u01/ABC/$(basename "$(dirname "$1")")"
mkdir -p "$target" && cp --backup "$1" "$target"
' find-sh {} \;
答案2
您可以cd
进入目标目录并find
从那里运行命令:
cd /tmp/data; find . -type f -name "*.txt" -exec cp --parents {} /u01/ABC/ \;
如果您需要返回到原始工作目录,可以cd -
稍后执行或在子 shell 中运行命令:
(cd /tmp/data; find . -type f -name "*.txt" -exec cp --parents {} /u01/ABC/ \;)