Discussion:
Verzeichnisstruktur kopieren ohne Inhalt
(zu alt für eine Antwort)
Bernd Mayer
2024-03-19 09:12:31 UTC
Permalink
Hallo

ich möchte eine gefüllte Verzeichnisstruktur mit insgesamt ca. 100
Verzeichnissen und einer Tiefe von 4 Unterverzeichnissen kopieren ohne
die Dateiinhalte.

Bisher habe ich das mit rsync und der Option --max-size erledigt.

Kann man das auch anders machen?

TIA


Bernd Mayer
Tim Ritberg
2024-03-19 10:00:58 UTC
Permalink
Post by Bernd Mayer
Hallo
ich möchte eine gefüllte Verzeichnisstruktur mit insgesamt ca. 100
Verzeichnissen und einer Tiefe von 4 Unterverzeichnissen kopieren ohne
die Dateiinhalte.
Bisher habe ich das mit rsync und der Option --max-size erledigt.
Kann man das auch anders machen?
TIA
Bernd Mayer
find . -type d > dirs.txt

xargs mkdir -p < dirs.txt

Tim
Markus Schaaf
2024-03-19 11:48:11 UTC
Permalink
Post by Tim Ritberg
find . -type d > dirs.txt
xargs mkdir -p < dirs.txt
$ find . -type d -print0 | (cd /somewhere && xargs -0 mkdir -p)

Sonst gibt's Probleme mit Leerzeichen.

MfG
Peter Heitzer
2024-03-19 16:14:59 UTC
Permalink
Post by Tim Ritberg
Post by Bernd Mayer
Hallo
ich möchte eine gefüllte Verzeichnisstruktur mit insgesamt ca. 100
Verzeichnissen und einer Tiefe von 4 Unterverzeichnissen kopieren ohne
die Dateiinhalte.
Bisher habe ich das mit rsync und der Option --max-size erledigt.
Kann man das auch anders machen?
TIA
Bernd Mayer
find . -type d > dirs.txt
xargs mkdir -p < dirs.txt
Das sollte auch als Einzeiler gehen:
find . -type d|cpio -p --make-directories <destination>
--
Dipl.-Inform(FH) Peter Heitzer, ***@rz.uni-regensburg.de
Erik Heinz
2024-03-19 17:05:50 UTC
Permalink
Post by Peter Heitzer
Post by Bernd Mayer
ich möchte eine gefüllte Verzeichnisstruktur mit insgesamt ca. 100
Verzeichnissen und einer Tiefe von 4 Unterverzeichnissen kopieren ohne
die Dateiinhalte.
find . -type d|cpio -p --make-directories <destination>
Diese Variante hat den Vorteil, dass Eigentümer, Rechte und Zeitstempel
erhalten bleiben. Bei den Varianten mit mkdir ist das nicht der Fall.

Viele Grüße,
Erik
Michael Kallweitt
2024-03-19 19:54:34 UTC
Permalink
Post by Erik Heinz
Post by Peter Heitzer
find . -type d|cpio -p --make-directories <destination>
Diese Variante hat den Vorteil, dass Eigentümer, Rechte und Zeitstempel
erhalten bleiben. Bei den Varianten mit mkdir ist das nicht der Fall.
+1

Auf cpio wäre ich in dem Zusammenhang nicht gekommen. Wieder was
gelernt!
--
michael.kallweitt.art
»Meine Stücke wachsen nicht von vorne nach hinten, sondern von innen nach
außen.« Pina Bausch https://de.wikipedia.org/wiki/Pina_Bausch#Inszenierung
Jens Schuessler
2024-03-19 20:01:15 UTC
Permalink
Post by Erik Heinz
Post by Peter Heitzer
Post by Bernd Mayer
ich möchte eine gefüllte Verzeichnisstruktur mit insgesamt ca. 100
Verzeichnissen und einer Tiefe von 4 Unterverzeichnissen kopieren ohne
die Dateiinhalte.
find . -type d|cpio -p --make-directories <destination>
Diese Variante hat den Vorteil, dass Eigentümer, Rechte und Zeitstempel
erhalten bleiben. Bei den Varianten mit mkdir ist das nicht der Fall.
Zeitstempel bleiben bei mir aber nur mit explizitem '-m' erhalten
,----
| -m, --preserve-modification-time
| Retain previous file modification times when creating
| files.
`----
Claus Reibenstein
2024-03-21 10:57:35 UTC
Permalink
Post by Jens Schuessler
Post by Erik Heinz
Diese Variante hat den Vorteil, dass Eigentümer, Rechte und Zeitstempel
erhalten bleiben. Bei den Varianten mit mkdir ist das nicht der Fall.
Zeitstempel bleiben bei mir aber nur mit explizitem '-m' erhalten
War das gefordert? Kann ich im OP nicht erkennen.

Gruß
Claus
Jens Schuessler
2024-03-21 16:28:00 UTC
Permalink
Post by Claus Reibenstein
Post by Jens Schuessler
Post by Erik Heinz
Diese Variante hat den Vorteil, dass Eigentümer, Rechte und Zeitstempel
erhalten bleiben. Bei den Varianten mit mkdir ist das nicht der Fall.
Zeitstempel bleiben bei mir aber nur mit explizitem '-m' erhalten
War das gefordert? Kann ich im OP nicht erkennen.
Hab ich mich auf den bezogen? Nein.
Es ging um die Aussage von Erik das 'cpio -p --make-directories' den
Zeitstempel erhalten würde.

Michael Kallweitt
2024-03-19 10:50:58 UTC
Permalink
Post by Bernd Mayer
Hallo
ich möchte eine gefüllte Verzeichnisstruktur mit insgesamt ca. 100
Verzeichnissen und einer Tiefe von 4 Unterverzeichnissen kopieren ohne
die Dateiinhalte.
cd source
find . -type d -exec mkdir -p ../target/'{}' \;
--
michael.kallweitt.art
»Meine Stücke wachsen nicht von vorne nach hinten, sondern von innen nach
außen.« Pina Bausch https://de.wikipedia.org/wiki/Pina_Bausch#Inszenierung
Tim Landscheidt
2024-03-19 13:17:30 UTC
Permalink
Post by Michael Kallweitt
Post by Bernd Mayer
ich möchte eine gefüllte Verzeichnisstruktur mit insgesamt ca. 100
Verzeichnissen und einer Tiefe von 4 Unterverzeichnissen kopieren ohne
die Dateiinhalte.
cd source
find . -type d -exec mkdir -p ../target/'{}' \;
Ohne „-depth“ sollte (GNU) find immer zuerst das Verzeichnis
selbst behandeln vor seinen Unterverzeichnissen, so dass man
auf das „-p“ verzichten können sollte.

Tim
Hermann Riemann
2024-03-19 10:52:17 UTC
Permalink
Post by Bernd Mayer
Hallo
ich möchte eine gefüllte Verzeichnisstruktur mit insgesamt ca. 100
Verzeichnissen und einer Tiefe von 4 Unterverzeichnissen kopieren ohne
die Dateiinhalte.
Bisher habe ich das mit rsync und der Option --max-size erledigt.
Kann man das auch anders machen?
Mit Python
Allerdings ist das Programm länger als das mit bash. Etwa:

import os

src_dir="/home/ich"
tar_dir="/home/du"
src_len=len(src_dir)

for dirname,dirnames,filenames in os.walk(src):
tar_rest=dirname[src_len:]
if tar_rest!="":
os.mkdir(f"{tar_dir}/{tar_rest}")
Eike Rathke
2024-03-19 11:28:16 UTC
Permalink
Post by Bernd Mayer
ich möchte eine gefüllte Verzeichnisstruktur mit insgesamt ca. 100
Verzeichnissen und einer Tiefe von 4 Unterverzeichnissen kopieren ohne
die Dateiinhalte.
find sourcedir -type d -maxdepth 4 -exec mkdir -p /DESTINATION/{} \;

Eike
--
OpenPGP/GnuPG encrypted mail preferred in all private communication.
GPG key 0x6A6CD5B765632D3A - 2265 D7F3 A7B0 95CC 3918 630B 6A6C D5B7 6563 2D3A
Use LibreOffice! https://www.libreoffice.org/
Martin Schnitkemper
2024-03-19 16:59:26 UTC
Permalink
Post by Bernd Mayer
Bisher habe ich das mit rsync und der Option --max-size erledigt.
Kann man das auch anders machen?
Ich mache das immer so

| rsync -av -f"+ */" -f"- *"

und dahinter das Quell- und Zielverzeichnis, also auch mit rsync, aber
etwas anders ;)
--
‣ Powered by Arch Linux x86_64 🐧 Kernel: 6.7.7-arch1-1
‣ Installed 3747 days ago, up 2 days, 7 hours, 13 minutes
‣ +++ Lebt in Schwebensgefahr: Jungfrau heiratet Magier +++
Bernd Mayer
2024-03-20 11:34:54 UTC
Permalink
Post by Martin Schnitkemper
Post by Bernd Mayer
Bisher habe ich das mit rsync und der Option --max-size erledigt.
Kann man das auch anders machen?
Ich mache das immer so
| rsync -av -f"+ */" -f"- *"
und dahinter das Quell- und Zielverzeichnis, also auch mit rsync, aber
etwas anders ;)
Hallo,

erstmal Danke an all die geantwortet haben.

In find muss ich mich mal intensiver einarbeiten und cpio ist auch
interessant.

Für Deine Lösung brauch ich noch etwas Zeit um die zu verstehen.

Mittlerweile habe ich meine Lösung mit rsync noch optimiert.
Da in den Verzeichnissen nur wenig verschiedene Dateitypen vorhanden
sind kann kann ich das ergänzend mit der Option --exclude verbessern.

Als Dateigrösse für --max-size hatte ich bisher 10k verwendet weil es 2
Skripte gibt die doch kopiert werden sollen (die könnte ich auch manuell
rüberkopieren) damit werden aber einige weitere unerwünschte Dateien
mitkopiert und ich musste das noch mal durchgehen und kontrollieren..

Die Lösung mit rsync hat für mich den Vorteil, daß nur ein Programm (und
eine manpage) benötigt wird.


Bernd Mayer
Martin Schnitkemper
2024-03-20 12:26:44 UTC
Permalink
Post by Bernd Mayer
Für Deine Lösung brauch ich noch etwas Zeit um die zu verstehen.
"-a" ist der archive mode und beinhaltet unter anderem die rekursive
Verarbeitung und die Übernahme der Besitzer und Zugriffsrechte, "-f" steht
für einen Filter, wobei "+ */" bedeutet, alle Verzeichnisse zu kopieren,
und das folgende "- *", alle Dateien auszuschließen. Damit erreicht man,
dass nur die Verzeichnisse und keine Inhalte kopiert werden.
--
‣ Powered by Arch Linux x86_64 🐧 Kernel: 6.7.7-arch1-1 | KDE-Plasma 5.27.10
‣ Installed 3748 days ago, up 3 days, 2 hours, 33 minutes
‣ +++ Jetzt kommt alles raus: Angeblicher Chirurg erweist sich als
Aufschneider +++
Bernd Mayer
2024-03-20 12:56:44 UTC
Permalink
Post by Martin Schnitkemper
Post by Bernd Mayer
Für Deine Lösung brauch ich noch etwas Zeit um die zu verstehen.
"-a" ist der archive mode und beinhaltet unter anderem die rekursive
Verarbeitung und die Übernahme der Besitzer und Zugriffsrechte, "-f" steht
für einen Filter, wobei "+ */" bedeutet, alle Verzeichnisse zu kopieren,
und das folgende "- *", alle Dateien auszuschließen. Damit erreicht man,
dass nur die Verzeichnisse und keine Inhalte kopiert werden.
Hallo,

Danke für die Erläuterung.
Die -a Option kannte ich schon und verwende die regelmässig.


Bernd Mayer
Arno Lutz
2024-03-20 18:33:24 UTC
Permalink
Post by Bernd Mayer
Die Lösung mit rsync hat für mich den Vorteil, daß nur ein Programm (und
eine manpage) benötigt wird.
hast du dir schon mal Grsync angeschaut?
Da kannst du dir alles bequem per klick zusammenstellen.

Arno
Bernd Mayer
2024-03-21 08:49:17 UTC
Permalink
Post by Arno Lutz
Post by Bernd Mayer
Die Lösung mit rsync hat für mich den Vorteil, daß nur ein Programm (und
eine manpage) benötigt wird.
hast du dir schon mal Grsync angeschaut?
Da kannst du dir alles bequem per klick zusammenstellen.
Hallo,

Grsync habe ich mir gestern installiert und mal die Optionen durchgesehen.

Ja - das ist interessant.

Die Filterfunktionen die Martin nutzt habe ich da auf die Schnelle aber
noch nicht gefunden - habe ich da was übersehen?

Mein erster Eindruck ist, daß ich dessen Einstellmöglichkeiten auch auf
der Konsole in einer Befehlszeile leicht nachbilden kann.

Mir rsync bin ich ansonsten ja vertraut, da habe ich diverse kleine
skripte für Backups u.Ä..

Dateiverwaltung erledige ich durchweg auf der Konsole, der mc ist dabei
sehr hilfreich.

Lediglich die Filterfunktionen von rsync hatte ich mir noch nicht im
Detail angesehen. Die --include und --exlude-Optionen hatte ich schon
öfters genutzt.
Das ist schon ein komplexes Programm mit zahlreichen Funktionen und
einer umfangreichen manpage.

Ungewöhnlich war da halt für mich im konkreten Fall auch das Kopieren
von local zu local, ansonsten benutze ich rsync übers Netz.


Bernd Mayer
Martin Schnitkemper
2024-03-21 13:42:02 UTC
Permalink
Post by Bernd Mayer
Die Filterfunktionen die Martin nutzt habe ich da auf die Schnelle aber
noch nicht gefunden - habe ich da was übersehen?
Habe ich auch nicht gefunden. Daran kranken die meisten Frontends,
dass sie nur eine vom Entwickler als wichtig erachtete Untermenge der
eigentlichen Funktionen bereitstellen; dazu wird die Filterfunktion
wahrscheinlich nicht gehören, wohl weil sie zu viel Variationsmöglichkeiten
bietet.

Dabei dürfte der Aufwand für die Umsetzung eigentlich überschaubar
sein, indem man in einem der Optionspanel einfach eine zusätzliche Checkbox
zB "Nur Verzeichnisstruktur kopieren" vorsieht und wenn die Option gesetzt
ist, wird die generierte Kommandozeile um die beiden Filterbefehle ergänzt.
Post by Bernd Mayer
Lediglich die Filterfunktionen von rsync hatte ich mir noch nicht im
Detail angesehen. Die --include und --exlude-Optionen hatte ich schon
Ich muss gestehen, dass ich sie seinerzeit auch nur nach Recherche
gefunden hatte. Ich gehöre aber auch zu denjenigen, die vor allem auf der
Konsole angewandte Parameter und Optionen nicht einfach per copy
& paste übernehmen ohne verstanden zu haben, was sie eigentlich genau
bewirken.
Post by Bernd Mayer
Das ist schon ein komplexes Programm mit zahlreichen Funktionen und
einer umfangreichen manpage.
Die enthalten auch einen Abschnitt "FILTER RULES", in dem anhand einiger
Beispiele die Filtermöglichkeiten erklärt werden. Aber es ist eben so, je
umfangreicher die Dokumentation ist, desto höher auch die Hemmschwelle,
sich da einzulesen und die relevanten Informationen zu finden.
Post by Bernd Mayer
Ungewöhnlich war da halt für mich im konkreten Fall auch das Kopieren
von local zu local, ansonsten benutze ich rsync übers Netz.
Ich benutze es nur lokal, und die Filterfunktion eigentlich auch nur einmal
im Jahr, um bei Verzeichnisse mit Mails, Rechnungen, Kontoauszügen usw., die
nach Jahren organisiert sind, für das neue Jahr eine leere Ordnerstruktur
ohne die Dokumente des Vorjahres zu bekommen.
--
‣ Powered by Arch Linux x86_64 🐧 Kernel: 6.7.7-arch1-1 | KDE-Plasma 5.27.10
‣ Installed 3749 days ago, up 4 days, 3 hours, 23 minutes
‣ +++ Bleibt locker: Formel-1-Pilot startet trotz wackelnden Spoilers +++
Loading...