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”?
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”?
Odpowiedzi:
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/passwdna 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 -rnie istnieje.
(Nieważne, że mvprzerwy, że filozofia w innych, mniejszych sposobów. Na przykład, mvw rzeczywistości robi cpnastępnie rmpodczas 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 mvnastępujący sposób (na przykład):
cp -al source/* dest/ && rm -r source/*
-lFlagę cpoznacza „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ś takiego rsync -a -r source/ target/? Uruchom -v -nnajpierw, aby wykonać pełny bieg próbny, aby upewnić się, że robi to, co chcesz.
Prawdopodobnie będziesz chciał zmienić poprawną odpowiedź na to:
https://github.com/iaindooley/pickdrop
Przykład:
powiedz, że mam:
test/
test/index.php
test/images/
test/images/a.jpg
test/images/thing.png
i chcę przenieść te rzeczy do / site
więc wygląda to tak:
site/
site/public/
site/public/index.php
site/public/a.jpg
site/public/thing.png
Mogę iść:
cd images &&
pick a.jpg thing.png
cd .. &&
pick index.php &&
cd .. &&
mkdir site &&
mkdir site/public &&
cd site/public &&
drop
Jest to dosłownie wycinane i wklejane.