在目录中查找所有匹配模式的文件并复制找到的子目录和文件

Find all files matching pattern in directory and copy subdirectories and files found

我的目录结构如下:

$DIRECTORY/*.xml
$DIRECTORY/*.others
$DIRECTORY/subdir1/*.xml
$DIRECTORY/subdir1/*.others
$DIRECTORY/subdir2/*.xml
$DIRECTORY/subdir2/*.others

并希望将所有 xml 文件复制到 $OUTPUT_DIRECTORY 包括 $DIRECTORY 的目录结构所以结果将是:

$OUTPUT_DIRECTORY/*.xml
$OUTPUT_DIRECTORY/subdir1/*.xml
$OUTPUT_DIRECTORY/subdir2/*.xml

我知道 find 有 -exec 和 -execdir,它们将使用 find 的输出作为指定命令的参数。但是,我看不到指定“-execdir 但将子目录保留为以下参数”的方法。值得注意的是,子目录可以很深。

有没有办法只用 find 来做这个,还是需要一些其他的 CLU?

find "${DIRECTORY}" -name '*.xml' -execdir cp "{}" "${OUTPUT_DIRECTORY}" \;

您可能想使用 rsync 而不是 find:

rsync -amv --include='*/' --include='*.xml' --exclude='*' "$DIRECTORY"/ "$OUTPUT_DIRECTORY"