2

У меня есть несколько папок, таких как /music/1/a.mp3 и /music/2/b.mp3

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

Есть ли способ, возможно, с помощью терминала, чтобы скопировать эти файлы в /musicTemp/ исключая папки?

Другими словами, результат двух приведенных выше примеров должен быть:

/music/1/a.mp3
/music/2/b.mp3

в:

/musicTemp/a.mp3
/musicTemp/b.mp3

2 ответа2

4

Команда find найдет все файлы указанного шаблона (-name), в данном случае это определенный тип файла: *.mp3 . -exec делает все следующие аргументы, которые будут приняты как аргументы команды, до аргумента, состоящего из ; встречается (в конце, с буквальным экранированием, чтобы предотвратить расширение оболочкой). В этом случае команда, которую мы хотим выполнить, является копией файла (cp) в файлы, которые соответствуют шаблону ({}) и копируют эти файлы в /destination_dir . Эта команда должна сделать свое дело:

find /music -name "*.mp3" -type file -exec cp {} /destination_dir \;
3

Если вы установили Bash 4, вы можете добавить shopt -s globstar в .bash_profile и запустить это:

cp /music/**/*.mp3 /musicTemp/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .