Якщо ви хочете перемістити всі файли всередині ієрархії каталогів до одного каталогу призначення, в bash ≥4 (помістіть shopt -s globstar
у свій ~/.bashrc
) або zsh:
mkdir ~/new-directory
mv -i **/*.xxx ~/new-directory
В інших оболонках:
mkdir ~/new-directory
find . -name '*.xxx' -exec mv -i {} ~/new-directory \;
Як прочитати цю find
команду:
.
: пройти поточний каталог
-name '*.xxx'
: діяти у файлах, ім'я яких відповідає цьому шаблону
-exec … \;
: виконуйте цю команду на кожному файлі, замінюючи {}
шлях до файлу
Існує більш складна команда, find
яка швидше використовується , якщо у вас є багато файлів, оскільки не потрібно викликати окремий mv
процес для кожного файлу:
find . -name '*.xxx' -exec sh -c 'mv -i "$@" "$0"' ~/new-directory {} +
В +
кінці вказується find
викликати команду на декількох файлах одночасно. Оскільки find
можна розмістити імена файлів лише в кінці командного рядка і mv
потрібно мати останній каталог призначення, ми використовуємо проміжну оболонку для перестановки аргументів ( "$0"
це перший аргумент для оболонки ~/new-directory
, і "$@"
це наступні аргументи, що надходять від find
розширення {}
).