Wie kopiere ich einen Verzeichnisbaum, aber nicht die Dateien in Linux?

17

Ich möchte ungefähr 200 Verzeichnisse und Unterverzeichnisse von einem Ort zum anderen kopieren, aber ich möchte nicht die Tausenden von Dateien in diesen Verzeichnissen kopieren. Ich bin auf Linux.

Hinweis: Ich habe nicht genügend Speicherplatz, um alles zu kopieren und dann alle Dateien zu löschen.

Kyle West
quelle

Antworten:

9
find some/dir -type d -print0 | rsync --files-from=/dev/stdin -0 ...
Ignacio Vazquez-Abrams
quelle
5

Ein anderer Ansatz ist mit find und mkdir :

find SOURCE -type d -exec mkdir TARGET/{} \;

Stellen Sie einfach sicher, dass TARGET bereits vorhanden ist, oder verwenden Sie die Option -p von mkdir.

Panos Rontogiannis
quelle
3

Sie können auch tun:

find inputdir -type d | cpio -pdumv destdir

Die Kraft der Einfachheit;)

Pilou
quelle
1

Ebenso mit (GNU) tar:

find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)

Sie brauchen nicht wirklich die -print0Befehlszeile auf der Suche oder -0auf der rsync-Befehlszeile, es sei denn, Sie haben Dateinamen, die Newline-Zeichen enthalten (was möglich, aber höchst unwahrscheinlich ist). Tar (und rsync und cpio) lesen Dateinamen Zeile für Zeile; Die Verwendung eines NULL-Abschlusszeichens ist meistens nützlich xargs, wenn durch Leerzeichen getrennte Dateinamen gelesen werden (und daher keine Dateien / Verzeichnisse mit Leerzeichen in ihren Namen ohne behandelt werden -0).

larsks
quelle
1
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
SergioAraujo
quelle
-1
cp -al 

Würde alle Dateien mit Hardlinks kopieren. Gleiche Struktur, gleiche Berechtigungen. (Hinweis: Feste Links, daher geht kein Speicherplatz verloren.)

SvennD
quelle
Es ist nicht möglich, feste Links über Dateisystemgrenzen hinweg zu erstellen
MountainX für Monica Cellio
Es
stimmt
-1

ls -d * / @source: find. -type d -print0> dirs.txt @ziel: xargs -0 mkdir -p

Dadurch werden bei beiden Befehlen anstelle von Leerzeichen Nullen als Trennzeichen verwendet. Beachten Sie, dass die Reihenfolge von -type d und -print0 wichtig ist!

Ashish Karpe
quelle
Dies ist nicht klar und scheint falsch. Es scheint, dass die @sourceund @destinationHinweise für den Leser sind, aber trotzdem kann dies nicht funktionieren.
Law29