
У меня есть папка 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
является узким местом производительности, вам нужно будет оптимизировать его дальше. Например, вы можете переместить операции в функцию.