web-dev-qa-db-fra.com

Remplacement de la commande DOS xcopy

Sous DOS, il y a la commande

xcopy /s *.mp3 ..\TEMP2

Comment puis-je faire cela dans Ubuntu?

cp -r *.mp3 ../TEMP2

va copier récursivement tous les fichiers mp3, malheureusement sans le chemin à cause du filtre *.mp3.

cp -r *.* ../TEMP2

copiera le chemin mais ne peut pas être limité aux fichiers mp3

J'ai jeté un œil à rsync, mais je ne comprends pas.

6
sleepless

La puissance des outils dans Ubuntu réside dans le fait que vous pouvez les combiner. La commande suivante trouve tous les fichiers .mp3 dans le répertoire en cours et ses sous-répertoires et les copie dans le dossier ../TEMP2/, en préservant les chemins d'accès:

find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \;
  • find -iname '*.mp3' - trouve tous les fichiers se terminant par .mp3 (insensible à la casse) et
    • -exec - exécute une commande pour chaque correspondance:
      • install -D {} ../TEMP2/{} - copie le fichier correspondant dans ../TEMP/ en préservant le chemin. ({} est remplacé par le chemin d'accès, y compris le nom du fichier)
    • \; - termine la commande -exec

Si vous souhaitez obtenir la progression, ajoutez -ls ("liste") à la commande avant -exec. Il peut aussi être placé après \;, mais dans ce cas, le nom est affiché après avoir été copié. Exemples:

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

Il y a plusieurs options, mais aucune n'est vraiment simple, j'en ai peur…

rsync

rsync -r --include="*/" --include="*.mp3" --exclude="*" --Prune-empty-dirs . ../TEMP2

Ceci indique d'exclure tous les fichiers (exclude="*"), mais de regarder dans tous les répertoires (include="*/") et d'inclure tous les fichiers mp3 (include="*.mp3"). Si vous ne souhaitez pas copier des répertoires ne contenant aucun fichier mp3, vous devez en outre utiliser l’option --Prune-empty-dirs.

Zip *: français

Zip -R archive.Zip "*.mp3"
unzip -d ../TEMP2 archive.Zip && rm archive.Zip

La première commande crée une archive avec tous les fichiers mp3, la seconde décompresse le contenu dans le répertoire cible et supprime le fichier d’archive s’il a réussi.

trouver

find . -iname "*.mp3" -exec install -D {} ../TEMP2/{} ";"

Tous les fichiers mp3 seront trouvés et copiés dans le chemin correspondant du répertoire ../TEMP2, après avoir créé la structure de répertoires (install -D).

copier tout et supprimer le reste

Cela n'a de sens que si vous avez juste quelques fichiers que vous ne voulez pas ne voulez pas copier:

cp -r * ../TEMP2
find ../TEMP2 -type f \! -iname '*.mp3' -delete

Cela copie tout, puis supprime tous les fichiers qui ne sont pas des fichiers mp3.

3
Marcel Stimberg