Ich möchte nur meine FLAC-Musikordner sichern. FLAC-Dateien könnten so in den Ordnern verschachtelt sein:
AlbumName/
├── Files/
│ ├── someSong01.flac
│ ├── someSong02.flac
├── Covers/
│ ├── someCover01.jpg
│ └── someCover02.jpg
Wie kopiere und verschiebe ich alle Ordner von AlbumName mit der entsprechenden Struktur und dem entsprechenden Inhalt, die mindestens eine FLAC-Datei enthalten (ich gehe davon aus, dass dies ausreicht, um zu sagen: Die Musik ist im FLAC-Format)
BEARBEITEN: FLAC-Dateien könnten verschachtelt sein; also kann ich haben:
AlbumName2/
├── someSong01.flac
├── someSong02.flac
├── Covers/
│ ├── someCover01.jpg
| └── someCover02.jpg
Und ich möchte diese Ordner mit all ihren Inhalten, nicht nur FLAC-Dateien, kopieren und in ein anderes Verzeichnis einfügen.
Also wenn ich das auch habe
AlbumName3/
├── someSong01.mp3
├── someSong02.mp3
├── Covers/
│ ├── someCover01.jpg
| └── someHiddenSong.flac
und
AlbumName4/
├── Files/
│ ├── someSong01.mp3
│ ├── someSong02.mp3
├── Covers/
│ ├── someCover01.jpg
│ └── someCover02.jpg
Ich möchte rekursiv in ein anderes Verzeichnis cp AlbumName, AlbumName2 und AlbumName3 aber nicht AlbumName4
EDIT: Keine der Antworten hat wirklich getan, was ich wollte, also habe ich so etwas benutzt:
find -mindepth 2 -name '*.flac' -exec dirname {} \; | awk -F "/" '{print $2}' | sort -u | while read -r dirname; do cp -r "$dirname" "backup/"; done
im grunde liste ich alle flac dateien auf, rufe den root ordner mit awk ab, lösche die duplikate und mache was ich will
quelle
Antworten:
Eine Option ist die Verwendung von rsync, das nur flac-Dateien kopiert und die Verzeichnisstruktur beibehält:
quelle
Hallo mein Freund, den du benutzen kannst
quelle
--parents
!*/*.flac
! Wirdcp -r --parents AlbumName/ newdirectory/
nicht ausreichen?shopt -s globstar
) zu aktivieren und dann**/*.flac
für glob zu verwenden. Der Doppelstern stimmt mit keinem oder mehreren Verzeichnissen überein.Gute Antworten
Ich möchte noch eine Möglichkeit hinzufügen, Sie können auch eine Kombination aus find und cpio verwenden
find . -name "*.flac" -print0|cpio --null -pdm destination/
Man kann auch
rsync
ein Shell-Skript verwenden oder schreiben, um Dateien mit der Verzeichnisstruktur zu finden und zu kopieren.quelle
Antwort 1: Sie können auch den
find
Befehl dafür verwenden.Erklärung:
mkdir
Erstellt ein neues Verzeichnis.find
Befehl findet*.flac
Dateien imAlbumName
Ordner.exec
Befehl führt dencp
Befehl für jeden zurückgegebenen Dateinamen ausfind
.Antwort 2: Sie können auch verwenden
find
Befehl mitxargs
als auchWeitere Informationen: find , xargs
quelle
find | xargs
wird bei Dateinamen mit Leerzeichen aufbrechen, stattdessen verwendenfind -print0 | xargs -0
.1 2.flac
Datei versucht , die Platz im Dateinamen hat. Können Sie mir bitte den Dateinamen mitteilen, bei dem einfind | xargs
Fehler auftritt?find -print0 | xargs -0
touch "a space" && find . | xargs ls
.Hatte gerade das gleiche Problem für meine Musikbibliothek zu lösen und löste es mit dem folgenden angepassten Skript. Ich habe es nicht vollständig mit zB Variablen erstellt, da ich es nur einmal verwenden möchte :).
Das Skript verschiebt jedes Verzeichnis mit flac-Dateien einschließlich aller anderen Dateien und Unterverzeichnisse mit rsync an einen neuen Speicherort. Mit rsync können Sie das Skript fortsetzen, wenn es während des Vorgangs angehalten wird.
Meine Bibliotheksstruktur:
Neue Bibliotheksstruktur:
(1) Starten Sie das folgende Shell-Skript im SOURCE-Ziel (ersetzen Sie TARGET durch das entsprechende Verzeichnis Ihrer Wahl - ich habe nur den absoluten Pfad verwendet)
Zeile 1: Finden Sie alle Verzeichnisse FLAC - Dateien und Rohr , die (|) , die in Art
Zeile 2: Entfernen Sie Duplikate mit Art und Rohr , dass die Liste in die do - Schleife
Zeile 3: für jedes Verzeichnis tut
Zeile 4: zeigen Sie das Verzeichnis in der Prozessreihe
5: Rsync in das Zielverzeichnis sowie Entfernen der Quelle und Beibehalten der Struktur (-R) in
Zeile 6 des Zielverzeichnisses : Leeres Verzeichnis entfernen (da Rsync nur Dateien entfernt)
(2) Nach erfolgreicher Ausführung des Skripts in (1) können Sie den folgenden Befehl im Quellverzeichnis ausführen
Dieser Befehl löscht alle leeren Verzeichnisse, die nicht im Skript gelöscht wurden. Dh "Artist" -Verzeichnisse, in denen alle Unterordner / Alben flac-Dateien enthalten.
quelle