Reemplazo del comando xcopy de DOS

Reemplazo del comando xcopy de DOS

En DOS está el comando

xcopy /s *.mp3 ..\TEMP2

¿Cómo puedo hacer esto en Ubuntu?

cp -r *.mp3 ../TEMP2

Copiará recursivamente todos los archivos mp3, desafortunadamente sin la ruta debido al *.mp3filtro.

cp -r *.* ../TEMP2

Copiará la ruta pero no se puede limitar a archivos mp3.

Eché un vistazo a rsync, pero no lo entiendo.

Respuesta1

El poder de las herramientas en Ubuntu es que puedes combinarlas. El siguiente comando busca todos los archivos .mp3 en el directorio actual y sus subdirectorios, y los copia en la ../TEMP2/carpeta, conservando las rutas:

find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \;
  • find -iname '*.mp3'- encuentra todos los archivos que terminan en .mp3(no distingue entre mayúsculas y minúsculas) y
    • -exec- ejecuta un comando para cada partido:
      • install -D {} ../TEMP2/{}- copia el archivo coincidente para ../TEMP/preservar la ruta. ( {}se reemplaza por la ruta que incluye el nombre del archivo)
    • \;- finaliza el -execcomando

Si desea obtener el progreso, agregue -ls("lista") al comando anterior -exec. También se puede poner después \;, pero en ese caso el nombre se muestra después de copiarlo. Ejemplos:

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

Respuesta2

Hay varias opciones, pero me temo que ninguna es realmente sencilla…

sincronización

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

Esto le indica que excluya todos los archivos ( exclude="*"), pero que busque en todos los directorios ( include="*/") e incluya todos los archivos mp3 ( include="*.mp3"). Si no desea copiar directorios que no contengan archivos mp3, la --prune-empty-dirsopción también es necesaria.

cremallera

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

El primer comando crea un archivo con todos los archivos mp3, el segundo descomprime el contenido en el directorio de destino y elimina el archivo si tuvo éxito.

encontrar

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

Esto encontrará todos los archivos mp3 y los copiará en la ruta correspondiente en el ../TEMP2directorio, después de crear primero la estructura del directorio ( install -D).

copiar todo y borrar el resto

Esto sólo tiene sentido si tiene sólo unos pocos archivos quenoquiero copiar:

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

Esto copia todo y luego elimina todos los archivos que no son archivos mp3.

información relacionada