Замена для команды DOS xcopy
В DOS есть команда
xcopy /s *.mp3 ..\TEMP2
Как я могу сделать это в Ubuntu?
cp -r *.mp3 ../TEMP2
будет рекурсивно копировать все файлы mp3, к сожалению, без пути из-за *.mp3
фильтр.
cp -r *.* ../TEMP2
скопирует путь, но не может быть ограничен mp3 файлами
Я посмотрел на Rsync, но я не понимаю.
2 ответа
Сила инструментов в Ubuntu в том, что вы можете комбинировать их. Следующая команда находит все файлы.mp3 в текущем каталоге и его подкаталогах и копирует их в ../TEMP2/
папка, сохраняющая пути:
find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \;
find -iname '*.mp3'
- находит все файлы, заканчивающиеся на.mp3
(без учета регистра) и-exec
- выполняет команду для каждого матча:install -D {} ../TEMP2/{}
- копирует соответствующий файл в../TEMP/
сохранение пути. ({}
заменяется на путь, включающий имя файла)
\;
- заканчивает-exec
команда
Если вы хотите получить прогресс, добавьте -ls
("список") до команды -exec
, Можно поставить после \;
тоже, но в этом случае имя показывается после копирования. Примеры:
find -iname '*.mp3' -ls -exec install -D {} ../TEMP2/{} \;
find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \; -ls
Есть несколько вариантов, но, боюсь, ни один из них не очень прост...
Rsync
rsync -r --include="*/" --include="*.mp3" --exclude="*" --prune-empty-dirs . ../TEMP2
Это говорит об исключении всех файлов (exclude="*"
), но заглядывать во все каталоги (include="*/"
) и включить все mp3 файлы (include="*.mp3"
). Если вы не хотите копировать каталоги, не содержащие mp3-файлов, кроме --prune-empty-dirs
вариант необходим.
застежка-молния
zip -R archive.zip "*.mp3"
unzip -d ../TEMP2 archive.zip && rm archive.zip
Первая команда создает архив со всеми mp3-файлами, вторая распаковывает содержимое в целевой каталог и удаляет архивный файл, если он был успешным.
находить
find . -iname "*.mp3" -exec install -D {} ../TEMP2/{} ";"
Это позволит найти все mp3-файлы и скопировать их по соответствующему пути в ../TEMP2
каталог, после создания структуры каталогов сначала (install -D
).
скопировать все и удалить остальные
Это имеет смысл, только если у вас есть несколько файлов, которые вы не хотите копировать:
cp -r * ../TEMP2
find ../TEMP2 -type f \! -iname '*.mp3' -delete
Это копирует все, а затем удаляет все файлы, которые не являются mp3-файлами