как скопировать все файлы, соответствующие шаблону, в новое дерево папок, соответствующее той же структуре

как скопировать все файлы, соответствующие шаблону, в новое дерево папок, соответствующее той же структуре

У меня есть папка All с

AllFolders
    F1
        some_file_20170315_xyz.txt
        some_file_20170314_xyz.txt
        ....
    F2
        some_other_file_20170315_abc.txt
        some_other_file_20170314_abc.txt
        ...
    ...
    Fn 

Как скопировать все файлы, соответствующие определенной дате, в другую пустую папку, чтобы структура папок также скопировалась и выглядела так:

Folder_20170315
    F1
        some_file_20170315_xyz.txt
    F2
        some_other_file_20170315_abc.txt

решение1

Один из способов — использовать findи cp:

find . -iname '*20170315*' -exec cp --parents {} /tmp/Folder_20170315 \;

Папка назначения должна уже существовать. Если хотите, можете также написать скрипт для ее создания.

Похоже, вы хотите проверить имя файла, но его findможно использовать и для проверки даты файла.

решение2

Поскольку cp --parentsна Mac эта функция недоступна, я использовал две команды для решения аналогичной проблемы:

find . -name '*.example' | xargs -I FOO dirname FOO | xargs -I FOO mkdir -p /new/root/directory/FOO
find . -name '*.example' | xargs -I FOO cp FOO /new/root/directory/FOO

Первая команда создает дерево каталогов. Вторая копирует файлы.

Это предполагает, что findявляется быстрым. Если findявляется узким местом производительности, вам нужно будет оптимизировать его дальше. Например, вы можете переместить операции в функцию.

Связанный контент