Jak usunąć katalogi ze źródła po skopiowaniu?

1

Chcę tylko przenieść reż. Patrzyłem sukcesywnie na mv, cp i rsync, ponieważ każde narzędzie z kolei nie miało opcji usunięcia katalogów ze źródła po skopiowaniu. Na przykład mv potrzebuje plików, a nie katalogów, gdy src i dst znajdują się na różnych urządzeniach:

„Przeniesienie między urządzeniami nie powiodło się: src na dst; nie można usunąć celu: Czy katalog”

Być może najprostszym sposobem na to jest użycie dodatkowego usunięcia cmd, chociaż wolałbym go nie używać, ponieważ zwiększa to ryzyko utraty danych.

użytkownik55542
źródło

Odpowiedzi:

5

Jak powiedział Bob. Niestety nie mogę (jeszcze) komentować, więc muszę tu wprowadzić poprawki. Sugeruję użycie nieco zmodyfikowanej wersji polecenia Bobs:

cp -rp source-dir target-dir && rm -r source-dir;

Podwójny znak amp zapewnia, że ​​drugie polecenie zostanie wykonane tylko wtedy, gdy pierwsze zakończy się pomyślnie - byłoby to przerażeniem, gdyby kopia z jakiegoś powodu zakończyła się niepowodzeniem (np. Za mało miejsca na woluminie docelowym), a źródło zostanie mimo to usunięte. .

Izzy
źródło
Dobry chwyt! Nigdy wcześniej nie widziałem tej struktury; uczyć się czegoś nowego każdego dnia.
BellevueBob,
Daję wam jeszcze jedną przydatną wskazówkę związaną z tym: chociaż && oznacza „ORAZ (jeśli się powiedzie)”, istnieje również podwójny potok || co oznacza „LUB (jeśli to się nie powiedzie)” - całkiem pomocne w skryptach, np. gdy najpierw musisz zamontować cel, a następnie skopiować rzeczy, zrobić coś innego itp .; jeśli montowanie się nie powiedzie, pozostały skrypt nie ma sensu - więc możesz użyć konstrukcji podobnej domount /path/to/target || { echo "Mount failed, aborting!"; exit 1 }
Izzy
Działa na moim końcu. Przy okazji, co robi -rp?
Syaiful Nizam Yahya
@publicENEMY działa rekurencyjnie i presevering atrybuty (własność, uprawnienia itp.). Zobacz man cp:)
Izzy
1

W rzeczywistości mv może „przenosić” katalogi; ale nie może przenosić się między urządzeniami ani systemami plików. Działa bardzo szybko, ponieważ wszystko, co robi, to przedefiniowanie wskaźnika pliku; same konteksty nie są kopiowane.

Potrzebujesz więc dwóch poleceń (skopiuj, a następnie usuń). W moim systemie Solaris przenoszę katalogi za pomocą tych dwóch poleceń:

cp -rp source-dir target-dir; rm -r source-dir;

Przejrzyj strony podręcznika, aby upewnić się, że używasz poprawnej składni w swoim środowisku i do traktowania wszelkich istniejących dowiązań symbolicznych.

BellevueBob
źródło
„mv” MOŻE przenosić się między urządzeniami i systemami plików, ale robi to jako „kopia”, po której następuje „usuń”. Wymyśli co robić.
lornix,
Twoja konstrukcja ma poważny problem: usunie oryginał, nawet jeśli kopia nie powiedzie się - w ten sposób skutecznie „pozbędziesz się” danych. Dokładnie to, co OP nazwał „zwiększa ryzyko utraty danych”.
Izzy