Копировать файлы на основе регулярных выражений в другую папку, но сохранить структуру папок - PullRequest
0 голосов
/ 28 января 2019

Я хочу скопировать файлы, соответствующие регулярному выражению, в другую папку, но, сохраняя часть структуры папок, все пути к файлам будут начинаться с src / main / java / buth, путь к которому будет другим для большинства файлов

Я знаю, что могу использовать

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

Для копирования файла, но затем я теряю путь к файлу в директории назначения

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вы на 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.)

0 голосов
/ 28 января 2019

Тем временем я заставил его работать (вероятно, не самым чистым способом)

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...