Jak skopiować drzewo katalogów, ale nie pliki w systemie Linux?

17

Chcę skopiować około 200 katalogów i podkatalogów z jednej lokalizacji do drugiej, ale nie chcę kopiować tysięcy plików w tych katalogach. Jestem na Linuksie.

Uwaga: nie mam wystarczającej ilości miejsca, aby skopiować wszystko, a następnie usunąć wszystkie pliki.

Kyle West
źródło

Odpowiedzi:

9
find some/dir -type d -print0 | rsync --files-from=/dev/stdin -0 ...
Ignacio Vazquez-Abrams
źródło
5

Innym podejściem jest find i mkdir :

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

Upewnij się tylko, że TARGET już istnieje lub użyj opcji -p programu mkdir.

Panos Rontogiannis
źródło
3

Możesz także:

find inputdir -type d | cpio -pdumv destdir

Siła prostoty;)

Pilou
źródło
1

Podobnie, używając tar (GNU):

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

Tak naprawdę nie potrzebujesz -print0wiersza polecenia find ani wiersza polecenia -0rsync, chyba że masz nazwy plików zawierające znaki nowego wiersza (co jest możliwe, ale bardzo mało prawdopodobne). Tar (i rsync i cpio) czytają nazwy plików linia po linii; użycie terminatora NULL jest najbardziej przydatne w przypadku xargs, który normalnie odczytuje nazwy plików oddzielone spacjami (a więc nie obsługuje plików / katalogów bez spacji w nazwach -0).

Larsks
źródło
1
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
SergioAraujo
źródło
-1
cp -al 

Kopiuje wszystkie pliki z twardymi linkami. Ta sama struktura, te same uprawnienia. (uwaga: twarde linki, więc nie stracono miejsca).

SvennD
źródło
Nie można tworzyć twardych dowiązań między granicami systemów plików
MountainX-for-Monica,
To prawda, ale nie powiedziano, że był to system plików ...
SvennD,
-1

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

Spowoduje to, że oba polecenia będą używać wartości null jako separatorów zamiast białych znaków. Zauważ, że kolejność -type i -print0 jest ważna!

Ashish Karpe
źródło
Nie jest to jasne i wydaje się nieprawidłowe. Wydaje się, że @sourcei @destinationsą wskazówkami dla czytelnika, ale i tak to nie działa.
Law29