【问题标题】:Copy files based on regex to another folder but keep folder structure将基于正则表达式的文件复制到另一个文件夹但保留文件夹结构
【发布时间】:2019-01-29 04:51:52
【问题描述】:

我想将匹配正则表达式的文件复制到另一个文件夹,但同时保留部分文件夹结构,所有文件路径都将以 src/main/java/ 开头,但对于大多数文件而言,之前的路径不同

我知道我可以使用

find . -iregex ".*HeadersConstants\.java" -exec cp {} ./destination/ \;

复制一个文件,然后我丢失了目标目录中的文件路径

【问题讨论】:

    标签: copy sh filepath


    【解决方案1】:

    你在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。)

    【讨论】:

      【解决方案2】:

      与此同时,我让它工作(可能不是最干净的方式)

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-23
        • 2013-06-18
        • 2014-03-03
        相关资源
        最近更新 更多