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.

Odpowiedzi:




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.


3

Możesz także:

find inputdir -type d | cpio -pdumv destdir

Siła prostoty;)


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).



-1
cp -al 

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


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!


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.