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
--parentsantes!*/*.flac!cp -r --parents AlbumName/ newdirectory/No será suficiente?shopt -s globstar) y luego usarlo**/*.flacpara 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
rsynco escribir un script de shell para buscar y copiar archivos con la estructura de directorios.fuente
Respuesta 1: También puede usar el
findcomando para lo mismo.Explicacion:
mkdircrea un nuevo directoriofindEl comando encuentra los*.flacarchivos ubicados en laAlbumNamecarpeta.execEl comando ejecuta elcpcomando para cada uno de los nombres de archivo quefindha regresado.Respuesta 2: También puede utilizar
findcomandos conxargsasíMás información: buscar , xargs
fuente
find | xargsse romperá en los nombres de archivo con espacios, más bien usefind -print0 | xargs -0en su lugar.1 2.flacarchivo que tiene espacio en el nombre del archivo. ¿Me puede decir el nombre del archivo en el quefind | xargsfalla?find -print0 | xargs -0touch "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