W środowisku GUI przeciąganie i upuszczanie z zamienianiem zastąpi pliki i całe katalogi (w tym zawartość) tym, co jest kopiowane. Czy istnieje sposób na osiągnięcie tego samego intuicyjnego wyniku za pomocą polecenia „mv”?
źródło
W środowisku GUI przeciąganie i upuszczanie z zamienianiem zastąpi pliki i całe katalogi (w tym zawartość) tym, co jest kopiowane. Czy istnieje sposób na osiągnięcie tego samego intuicyjnego wyniku za pomocą polecenia „mv”?
Nie z mv
.
Podstawową funkcją mv
(pomimo nazwy) jest zmiana nazwy obiektu. Jedną z gwarancji, jakie daje UNIX, jest to, że zmiany nazw są atomowe - nigdy nie zobaczysz częściowo ukończonej zmiany nazwy. Ta gwarancja może być bardzo przydatna, jeśli chcesz zmienić plik ( /etc/passwd
na przykład), na który mogą patrzeć inne programy, i chcesz, aby zobaczyli starą lub nową wersję pliku i nie ma innej możliwości . Ale „rekurencyjna zmiana nazwy”, którą opisujesz, złamałaby tę gwarancję - mogłabyś zatrzymać ją na środku i miałbyś na wpół przesunięte drzewo i prawdopodobnie bałagan - i tak naprawdę nie pasuje to do filozofii z mv
. Zgaduję, dlaczego mv -r
nie istnieje.
(Nieważne, że mv
przerwy, że filozofia w innych, mniejszych sposobów. Na przykład, mv
w rzeczywistości robi cp
następnie rm
podczas przenoszenia plików z jednego systemu plików na inny).
Dosyć filozofii. Jeśli chcesz rekurencyjnie przenosić („przeciągnij i upuść”) drzewo z jednego miejsca do drugiego w tym samym systemie plików , możesz uzyskać wydajność i szybkość w mv
następujący sposób (na przykład):
cp -al source/* dest/ && rm -r source/*
-l
Flagę cp
oznacza „twardy dołączenie zamiast kopiować tworzyć” - to skutecznie tworząc nową nazwę, która wskazuje na tych samych danych plików jak starego pliku. Działa to tylko w systemach plików, które obsługują twarde łącza - więc każdy natywny system plików UNIX jest w porządku, ale nie będzie działał z FAT.
Te &&
środki „tylko uruchomić następujące polecenie, jeśli polecenie poprzedzające udało”. Jeśli chcesz, możesz zamiast tego uruchomić kolejno dwa polecenia.
Nie sądzę, że można odtworzyć opisywane zachowanie przeciągania i upuszczania
mv
, ponieważ niepuste podkatalogi w celu nie zostaną zastąpione.Być może
rsync
? Coś takiegorsync -a -r source/ target/
? Uruchom-v -n
najpierw, aby wykonać pełny bieg próbny, aby upewnić się, że robi to, co chcesz.źródło
mv -f /path/to/source/folder/* /destination/folder/
Przeniesie wszystko z / path / do / source / folderu, łącznie z plikami i katalogami do / destination / folderu.
I nadpisze istniejące pliki i katalogi.
źródło
Prawdopodobnie będziesz chciał zmienić poprawną odpowiedź na to:
https://github.com/iaindooley/pickdrop
Przykład:
powiedz, że mam:
i chcę przenieść te rzeczy do / site
więc wygląda to tak:
Mogę iść:
Jest to dosłownie wycinane i wklejane.
źródło