Использование подоболочек с find
*
Будет расширен вашей оболочкой до того, как find
увидит, так что это неправильно - это может даже привести к потере данных. Вы не можете процитировать это, потому что тогда это не будет расширено вообще.
Что вам нужно, это подоболочка, которая получает папку в качестве аргумента, а затем выполняет расширение позже:
find . -type d -name '2016*' -exec sh -c 'mv -- "$0"/* /path/to/target/' {} \;
--
предотвращают файлы с запуском -
от интерпретируются как mv
вариантов, и вы должны экранируете имя папки в "$0"
Используя чистый Bash
Альтернативное использование рекурсивного сглаживания с помощью Bash ≥ 4.0:
shopt -s globstar
mv **/2016*/* /path/to/target/
Я предполагаю, что это намного чище, хотя это ломает слишком большое количество файлов.