Supongo que la extensión de sus archivos de audio es .mp3
find <AudioFolderPath> -name '*.mp3' -exec mv -it <YourTargetFolder> {} +
Notas:
Reemplace .mp3
con la extensión de sus archivos de audio
Reemplace <AudioParentFolderPath>
con la carpeta principal que contiene sus subcarpetas.
Reemplace <YourTargetFolder>
con la ruta de la carpeta en la que necesita colocar todos los archivos.
Si los archivos de arrastre de diferentes subcarpetas tienen el mismo nombre, solo se moverá uno.
editar: Como dijo Costas : "El -i
interruptor se vuelve mv
interactivo, se le solicitará antes de sobrescribir los archivos existentes"
t
podría ser para "objetivo"?-t
permite especificar primero el destino. de lamv
página del manual:-t, --target-directory=DIRECTORY
move all SOURCE arguments into DIRECTORY
Tenga en cuenta que ese comando sobrescribirá cualquier archivo con el mismo nombre. Puede usar esto para que se le solicite antes de sobrescribir:
Explicación
-type f
: solo encuentra archivos regulares.-mindepth 2
: encuentra solo archivos en subdirectorios.-exec mv -it ./ {}
: el-exec
medio "ejecuta este comando en cada archivo encontrado". El{}
será reemplazado con los nombres de los archivos. El-i
conmutador se vuelvemv
interactivo, se le preguntará antes de sobrescribir los archivos existentes y-t
establecerá el directorio de destino./
.+
: junte los archivos (en una línea de argumento) tantos como el shell puede operar con el comando para invocar los tiempos mínimos del comando (no uno por uno sino uno a varios).Con respecto a otras eliminaciones de carpetas vacías, puede usar la misma recepción:
fuente
-type f
selecciona solo archivos sin formato, excluyendo enlaces simbólicos, canalizaciones con nombre y similares. Para mover todos los archivos que no sean directorios, puede hacerlo! -type d
.-L
parámetro-i
es estándar,-t
es solo GNU (nada que ver con Linux, que es solo un núcleo que se encuentra en algunos sistemas GNU y no GNU)-t
no existe en algunos sistemas (como un AIX no tan antiguo)find . -type f -mindepth 2 -exec mv {} ./ \;
Sí, ese es un límite en el tamaño acumulativo de argumentos y entorno pasados a la
execve()
llamada del sistema al ejecutar un comando externo.Con
zsh
, puedes usar su incorporadomv
en su lugar:O use
zargs
para dividir la lista en fragmentos manejables:Con
ksh93
:Con GNU
xargs
y con GNUmv
con un shell dondeprintf
está integrado (la mayoría,mksh
siendo la excepción notable):fuente
zsh
caso de que pueda poner algunos calificadores globales , por ejemplo,(.)
o(^/)
después del último*
.Una solución bastante portátil podría ser:
buscar todos los archivos en cada subcarpeta y moverlos al directorio actual
Puede agregar un
| egrep "\.au$|\.mp3$|\.ac3$"
intermedio para asegurarse también de que los archivos que encontró son archivos con una extensión de audio (agregue tantas extensiones como sea necesario para cubrir todo tipo, solo proporciono 3 comunes)fuente
find
en absoluto. Solo lo suficienteecho
oprintf
find
no resuelva el problema, peroxargs
sí.