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.
linux
command-line-interface
rsync
copy
Kyle West
źródło
źródło
rsync -a --include='*/' --exclude='*' ${source} ${destination}
.źródło
Innym podejściem jest find i mkdir :
Upewnij się tylko, że TARGET już istnieje lub użyj opcji -p programu mkdir.
źródło
Możesz także:
Siła prostoty;)
źródło
Podobnie, używając tar (GNU):
Tak naprawdę nie potrzebujesz
-print0
wiersza polecenia find ani wiersza polecenia-0
rsync, 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 przypadkuxargs
, który normalnie odczytuje nazwy plików oddzielone spacjami (a więc nie obsługuje plików / katalogów bez spacji w nazwach-0
).źródło
źródło
Kopiuje wszystkie pliki z twardymi linkami. Ta sama struktura, te same uprawnienia. (uwaga: twarde linki, więc nie stracono miejsca).
źródło
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!
źródło
@source
i@destination
są wskazówkami dla czytelnika, ale i tak to nie działa.