Je souhaite sauvegarder uniquement mes dossiers de musique FLAC. Les fichiers FLAC peuvent être imbriqués comme ça dans les dossiers:
AlbumName/
├── Files/
│ ├── someSong01.flac
│ ├── someSong02.flac
├── Covers/
│ ├── someCover01.jpg
│ └── someCover02.jpg
Comment copier et déplacer tous les dossiers d'AlbumName avec leur structure et leur contenu correspondants qui contiennent quelque part dans au moins un fichier FLAC (je suppose que cela suffit pour dire: la musique est au format FLAC)
EDIT: les fichiers FLAC peuvent être imbriqués; donc je peux avoir:
AlbumName2/
├── someSong01.flac
├── someSong02.flac
├── Covers/
│ ├── someCover01.jpg
| └── someCover02.jpg
Et je veux copier ces dossiers avec tout leur contenu, pas seulement les fichiers FLAC, et les coller dans un autre répertoire.
Donc si j'ai aussi
AlbumName3/
├── someSong01.mp3
├── someSong02.mp3
├── Covers/
│ ├── someCover01.jpg
| └── someHiddenSong.flac
et
AlbumName4/
├── Files/
│ ├── someSong01.mp3
│ ├── someSong02.mp3
├── Covers/
│ ├── someCover01.jpg
│ └── someCover02.jpg
Je veux cp récursivement dans un autre répertoire AlbumName, AlbumName2 et AlbumName3 mais pas AlbumName4
EDIT: Aucune des réponses ne faisait vraiment ce que je voulais, alors j'ai fini par utiliser quelque chose comme ça:
find -mindepth 2 -name '*.flac' -exec dirname {} \; | awk -F "/" '{print $2}' | sort -u | while read -r dirname; do cp -r "$dirname" "backup/"; done
en gros je liste tous les fichiers flac, je récupère le dossier racine en utilisant awk, je supprime les doublons et je fais ce que je veux
la source
Réponses:
Une option consiste à utiliser rsync, qui copie uniquement les fichiers flac et préserve la structure du répertoire:
la source
salut mon ami tu peux utiliser
la source
--parents
auparavant!*/*.flac
! Necp -r --parents AlbumName/ newdirectory/
suffira pas?shopt -s globstar
), puis d'utiliser**/*.flac
pour le glob. La double étoile correspondra à zéro ou plusieurs répertoires.Belles réponses
Je veux ajouter une autre façon, vous pouvez également utiliser une combinaison de find et cpio
find . -name "*.flac" -print0|cpio --null -pdm destination/
On peut également utiliser
rsync
ou écrire un script shell pour rechercher et copier des fichiers avec la structure de répertoires.la source
Réponse 1: Vous pouvez également utiliser la
find
commande pour la même chose.Explication:
mkdir
crée un nouveau répertoire.find
La commande recherche les*.flac
fichiers situés dans leAlbumName
dossier.exec
commande exécute lacp
commande pour chacun des noms de fichiersfind
renvoyés.Réponse 2: Vous pouvez également utiliser la
find
commande avecxargs
aussi bienPlus d'informations: trouver , xargs
la source
find | xargs
va casser sur les noms de fichiers avec des espaces, utilisez plutôt à lafind -print0 | xargs -0
place.1 2.flac
fichier qui a de l'espace dans le nom de fichier. Pouvez-vous me faire savoir le nom du fichier sur lequelfind | xargs
échoue?find -print0 | xargs -0
touch "a space" && find . | xargs ls
.Je viens de résoudre le même problème pour ma bibliothèque musicale et je l'ai résolu en utilisant le script adapté suivant. Je ne l'ai pas entièrement conçu avec des variables ie, car je n'ai l'intention de l'utiliser qu'une seule fois :).
Le script déplace chaque répertoire contenant des fichiers flac, y compris tous les autres fichiers et sous-répertoires vers un nouvel emplacement à l'aide de rsync. rsync vous permet de reprendre le script s'il s'arrête pendant le processus.
Ma structure de bibliothèque:
Nouvelle structure de bibliothèque:
(1) démarrer le script shell suivant dans la destination SOURCE (remplacer TARGET par le répertoire respectif de votre choix - je viens d'utiliser le chemin absolu)
ligne 1: recherchez tous les répertoires contenant des fichiers flac et le canal (|) qui les trient
ligne 2: supprimez les doublons avec le tri et le canal qui figurent dans la boucle do
ligne 3: pour chaque répertoire faites la
ligne 4: affichez le répertoire dans le processus
ligne 5: rsync vers le répertoire cible plus supprimer la source et conserver la structure (-R) dans la
ligne d' emplacement cible 6: supprimer le répertoire vide (car rsync supprime uniquement les fichiers)
(2) après avoir réussi à exécuter le script dans (1), vous pouvez exécuter la commande suivante dans le répertoire source
Cette commande supprime tous les répertoires vides non supprimés dans le script. C'est-à-dire les répertoires "Artist", où tous les sous-dossiers / albums incluaient des fichiers flac.
la source