Chcę przenieść zawartość katalogu do innego katalogu z tymi samymi folderami.
Oto przykład:
Mam ./backup
katalogi base
i test
. Teraz chcę przenieść te katalogi ./backupArchives
.
Używam tego:
mv ./backup/* ./backupArchives
ale dostałem błąd
mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty
Próbowałem użyć --force
, ale bez powodzenia. Czy istnieje sposób na przeniesienie go, gdy foldery już istnieją?
Uwaga: Chcę tylko scalić zawartość, nie ma nadpisywania.
rsync
zamiast tego, spowoduje scalenie.Odpowiedzi:
Chociaż strona man nie dokumentuje go,
mv
odmówi zmiany nazwy katalogu na inny katalog, jeśli katalog docelowy zawiera pliki. Jest to dobra sprawa w twoim przypadku, ponieważ okazuje się, że chcesz scalić zawartość źródła z celem, comv
się nie uda.Użyj
rsync -a backup/ backupArchives/
zamiast tego. Po tymrm -rf backup/*
.Zamiast używać
rsync
, możesz także zrobić klasyczneco daje ci więcej punktów maniaków.
źródło
rm -rf backupArchives
bez konsekwencji, nie mówiąc już o „okropnych”.sudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)'
Szybko i brudno, jeśli wiesz, co robisz:
źródło
Po przeniesionym katalogu potrzebujesz
*
(reprezentuje dowolny tekst lub liczbę). Na przykład:to wszystko, jeśli przenosisz pliki, niż przenosisz jako:
mv /var/www/index.php /recovery/index.php
Innym sposobem jest spakowanie zawartości tego folderu za pomocą tar:
Następnie przenieś go do innego pliku. Polecam także ten krok, ponieważ smoła go kompresuje i zmniejsza.
Aby wyodrębnić pliki do innego folderu, użyj
Jeśli chcesz skopiować do lokalizacji, której nie jesteś właścicielem, pamiętaj, aby poprzedzić polecenie
sudo
poleceniem po dowolnej opcji, której chcesz użyć.źródło
-R
pewnością nie powinno to nastąpić po pierwszym sporze. Opcje (prawie) zawsze poprzedzają argumenty polecenia. Ponadtomv
nie ma-R
opcji, a na koniec rekurencja nie ma znaczenia dlamv
. @DimitrisTheodoridis najpierw przetestuj swoją odpowiedź.Pewnie
rsync
działa, ale może to również działać na komputerze, który nie obsługujersync
(tj. W cpanel, którego rsync nie jest domyślnie instalowany).Co z użyciem:
Następnie usuń
backup
katalog, jeśli to konieczneUwaga 1: Musisz przejść
cd
dobackup
katalogu przed uruchomieniemcp -R --parents ...
Uwaga 2: Sprawdź dwukrotnie
backupArchives
katalog, jeśli masz nowe pliki z kopii zapasowej.źródło
Zanim zadamy pytanie, zastanówmy się nad uproszczoną sprawą.
Załóżmy, że w / home / admin mamy dwa foldery
foo
ibar
które mają taką samą strukturę podkatalogów, ale każdy z nich zawiera różne pliki w nim. Teraz chcemy połączyć je w jedno. Kiedy robimy takie rzeczymv foo/* bar
,mv: directory not empty
pojawia się błąd .Moim rozwiązaniem jest zrezygnowanie z narzędzi wiersza poleceń i przejście do menedżera plików GUI, na przykład delfina. Kiedy zmienisz nazwę
foo
nabar
w delfina, daje to opcję zapisu do folderu docelowego i pyta, czy zastąpić istniejące pliki, interaktywnie. Pozwala to uniknąć kopiowania i usuwania, co w efekcie oszczędza Twój czas bez jednego wiersza kodu.PS: Nie przetestowałem każdego menedżera plików. Ale większość z nich powinna mieć tę funkcję.
źródło