【发布时间】:2019-01-29 04:51:52
【问题描述】:
我想将匹配正则表达式的文件复制到另一个文件夹,但同时保留部分文件夹结构,所有文件路径都将以 src/main/java/ 开头,但对于大多数文件而言,之前的路径不同
我知道我可以使用
find . -iregex ".*HeadersConstants\.java" -exec cp {} ./destination/ \;
复制一个文件,然后我丢失了目标目录中的文件路径
【问题讨论】:
我想将匹配正则表达式的文件复制到另一个文件夹,但同时保留部分文件夹结构,所有文件路径都将以 src/main/java/ 开头,但对于大多数文件而言,之前的路径不同
我知道我可以使用
find . -iregex ".*HeadersConstants\.java" -exec cp {} ./destination/ \;
复制一个文件,然后我丢失了目标目录中的文件路径
【问题讨论】:
你在linux上吗?从历史上看,cpio 本来是一个显而易见的选择,但现在 rsync 可能会更好:
find . -iregex ".*HeadersConstants\.java" |\
rsync -v --files-from=- ./ ${destination}/
正如您的问题代码所建议的那样,将目的地放在. 内可能不是一个好主意,但我们可以停止查找:
find . -path ./destination -prune \
-o -iregex ".*HeadersConstants\.java" -print |\
rsync -v --file-from=- ./ ./destination/
(您可能想调查为什么需要-print。)
【讨论】:
与此同时,我让它工作(可能不是最干净的方式)
javaRe='(.*)\/src\/main\/java\/(.*)\/'
find . -name "HeadersConstants\.java" | while read f
do
if [[ ${f} =~ ${javaRe} ]]; then
path=${BASH_REMATCH[2]}
fullpath=${destination}${srcDir}${path}
mkdir -p "$fullpath"
cp "$f" "$fullpath"
fi
done
【讨论】: