Замена для команды 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-файлами

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