Quiero hacer una copia de seguridad solo de mis carpetas de música FLAC. Los archivos FLAC se pueden anidar así dentro de las carpetas:
AlbumName/
├── Files/
│ ├── someSong01.flac
│ ├── someSong02.flac
├── Covers/
│ ├── someCover01.jpg
│ └── someCover02.jpg
¿Cómo copio y muevo todas las carpetas de AlbumName con su estructura y contenido correspondientes que contienen en algún lugar dentro de al menos un archivo FLAC (supongo que esto es suficiente para decir: la música está en formato FLAC)
EDITAR: los archivos FLAC podrían estar anidados; para que pueda tener:
AlbumName2/
├── someSong01.flac
├── someSong02.flac
├── Covers/
│ ├── someCover01.jpg
| └── someCover02.jpg
Y quiero copiar esas carpetas con todo su contenido, no solo los archivos FLAC, y pegarlas en otro directorio.
Entonces si yo también tengo
AlbumName3/
├── someSong01.mp3
├── someSong02.mp3
├── Covers/
│ ├── someCover01.jpg
| └── someHiddenSong.flac
y
AlbumName4/
├── Files/
│ ├── someSong01.mp3
│ ├── someSong02.mp3
├── Covers/
│ ├── someCover01.jpg
│ └── someCover02.jpg
Quiero cp recursivamente a otro directorio AlbumName, AlbumName2 y AlbumName3 pero no AlbumName4
EDITAR: Ninguna de las respuestas estaba realmente haciendo lo que quería, así que terminé usando algo así:
find -mindepth 2 -name '*.flac' -exec dirname {} \; | awk -F "/" '{print $2}' | sort -u | while read -r dirname; do cp -r "$dirname" "backup/"; done
básicamente enumero todos los archivos flac, recupero la carpeta raíz usando awk, elimino los duplicados y hago lo que quiero
fuente
Respuestas:
Una opción es usar rsync, que copia solo archivos flac y conserva la estructura de directorios:
fuente
hola mi amigo puedes usar
fuente
--parents
antes!*/*.flac
!cp -r --parents AlbumName/ newdirectory/
No será suficiente?shopt -s globstar
) y luego usarlo**/*.flac
para el glob. La estrella doble coincidirá con cero o más directorios.Buenas respuestas
Quiero agregar una forma más, también puedes usar una combinación de find y cpio
find . -name "*.flac" -print0|cpio --null -pdm destination/
También se puede usar
rsync
o escribir un script de shell para buscar y copiar archivos con la estructura de directorios.fuente
Respuesta 1: También puede usar el
find
comando para lo mismo.Explicacion:
mkdir
crea un nuevo directoriofind
El comando encuentra los*.flac
archivos ubicados en laAlbumName
carpeta.exec
El comando ejecuta elcp
comando para cada uno de los nombres de archivo quefind
ha regresado.Respuesta 2: También puede utilizar
find
comandos conxargs
asíMás información: buscar , xargs
fuente
find | xargs
se romperá en los nombres de archivo con espacios, más bien usefind -print0 | xargs -0
en su lugar.1 2.flac
archivo que tiene espacio en el nombre del archivo. ¿Me puede decir el nombre del archivo en el quefind | xargs
falla?find -print0 | xargs -0
touch "a space" && find . | xargs ls
.Solo tuve que resolver el mismo problema para mi biblioteca de música y lo resolví usando el siguiente script adaptado. No lo diseñé completamente con variables, es decir, solo tengo la intención de usarlo una vez :).
El script mueve todos los directorios que contienen archivos flac, incluidos todos los demás archivos y subdirectorios, a una nueva ubicación mediante rsync. rsync le permite reanudar el script si se detiene durante el proceso.
La estructura de mi biblioteca:
Nueva estructura de biblioteca:
(1) inicie el siguiente script de shell en el destino SOURCE (reemplace TARGET con el directorio respectivo de su elección; acabo de utilizar la ruta absoluta)
fila 1: busque todos los directorios que contengan archivos flac y canalización (|) que en la clasificación
fila 2: elimine los duplicados con clasificación y canalización que figuran en el ciclo do
fila 3: para cada directorio
fila 4: muestre el directorio en el proceso
fila 5: rsync al directorio de destino más eliminar la fuente y preservar la estructura (-R) en la
fila de ubicación de destino 6: eliminar el directorio vacío (como rsync solo elimina los archivos)
(2) después de ejecutar con éxito el script en (1), puede ejecutar el siguiente comando en el directorio de origen
Este comando elimina todos los directorios vacíos no eliminados dentro del script. Es decir, directorios "Artist", donde todas las subcarpetas / álbumes incluían archivos flac.
fuente