Как я могу искать файлы во всех подкаталогах с помощью оболочки и затем скопировать те файлы?

Как я могу найти просто *.mp3 файлы с рекурсивной командой как ls -R *.mp3 в каталоге, который содержит несколько подкаталогов и в конце, копируют эти файлы в каталоге, который я выбираю.

Спасибо за Вашу поддержку.

8
задан 25 August 2012 в 12:53

2 ответа

Команда:

find /path/to/directory -name "*.mp3" -exec cp {} /some/other/dir/ \;

Альтернатива:

find /path/to/dir/ -name '*.mp3' | xargs cp -t /target/

Пример:

alex@MaD-pc:~/test$ ls
1  2  3
alex@MaD-pc:~/test$ ls 1 2 3
1:
1.txt  2.mp3  3.txt

2:
4.txt  5.mp3  6.txt

3:
alex@MaD-pc:~/test$ find . -name "*.mp3" -exec cp {} 3/ \;
alex@MaD-pc:~/test$ ls 3
2.mp3  5.mp3

Для получения дополнительной информации:

man find
13
ответ дан 21 October 2019 в 12:29

Существует также другой способ сделать это, который я думаю, удовлетворит Вашей цели отлично. Вы можете объединить find с while цикл и даже не должны использовать или exec или xargs вообще. Если бы, например, Вы хотели скопировать Ваш mp3s от Вашей папки загрузки до Вашей музыкальной папки, то Вы использовали бы следующий сценарий, который я много раз использовал.

можно изменить его, как Вы хотите путем изменения каталогов, в которые find поиски и помещают получающиеся файлы; если никакой каталог не будет указан, [то 117] будет искать всю домашнюю папку. Можно также измениться cp на mv или другие команды. Это довольно быстро, поскольку я только что протестировал его с 3 945 .jpg файлы! Скопируйте его в текстовый редактор, сохраните его и затем сделайте его исполняемым файлом путем выполнения chmod +x myscript.

#!/bin/bash
# a script to recursively find and copy files to a desired location
find ~/Downloads -type f -iname '*.mp3' -print0 |
while IFS= read -r -d '' f; 
do cp -- "$f" ~/Music ;
done

В этом отмеченном Bash wiki показано, как полезный это должно объединиться while цикл и read команды для обработки вывода эти find команда; и способ, которым я сделал это, удостоверяется, что сценарий не повредится, если это столкнется с именами файлов с пробелами или другими непредвиденными или специальными символами.

Для более общей информации об эти find команда, войдите в терминал man find или посмотрите страницы справочника Ubuntu онлайн . Для большого введения в использование находки см. эта статья также.

2
ответ дан 21 October 2019 в 12:29

Другие вопросы по тегам:

Похожие вопросы: