使用 find 复制文件时如何保留最后的目录结构

使用 find 复制文件时如何保留最后的目录结构

使用“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/ \;)

相关内容