Замена команды DOS xcopy

Замена команды DOS xcopy

В DOS есть команда

xcopy /s *.mp3 ..\TEMP2

Как это сделать в Ubuntu?

cp -r *.mp3 ../TEMP2

рекурсивно скопирует все mp3-файлы, к сожалению, без пути из-за *.mp3фильтра.

cp -r *.* ../TEMP2

скопирует путь, но не может быть ограничен файлами mp3

Я посмотрел rsync, но не понял.

решение1

Сила инструментов в Ubuntu в том, что вы можете их комбинировать. Следующая команда находит все файлы .mp3 в текущем каталоге и его подкаталогах и копирует их в папку ../TEMP2/, сохраняя пути:

find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \;
  • find -iname '*.mp3'- находит все файлы, заканчивающиеся на .mp3(без учета регистра) и
    • -exec- выполняет команду для каждого матча:
      • install -D {} ../TEMP2/{}- копирует соответствующий файл с ../TEMP/сохранением пути. ( {}заменяется путем, включая имя файла)
    • \;- завершает -execкоманду

Если вы хотите получить прогресс, добавьте -ls("list") к команде перед -exec. Его можно поставить \;и после, но в этом случае имя будет показано после копирования. Примеры:

find -iname '*.mp3' -ls -exec install -D {} ../TEMP2/{} \;
find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \; -ls

решение2

Есть несколько вариантов, но, боюсь, ни один из них не является по-настоящему простым…

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.

Связанный контент