Po uzyskaniu odpowiedzi Stephena Kitta i omówieniu tego polecenia jako potencjalnego rozwiązania:
sudo mv -i ~/my_data_on_60GB_partition/* /media/admin/my_data/
Postanowiłem wstrzymać się z uruchomieniem go, dopóki nie skupię się na tym, co się dzieje, ta odpowiedź opisuje to, czego się dowiedziałam i co skończyłam.
Używam GNU, mv
który kopiuje pliki do celu, a tylko wtedy, gdy operacja kopiowania się powiedzie, usuwa oryginał.
Chciałem jednak potwierdzić, czy mv
wykonuje tę sekwencję jeden plik na raz, jeśli to prawda, oryginalna zawartość folderu zostałaby czysto podzielona na dwie części, jedna przesunięta do miejsca docelowego, a druga pozostawiona w źródle. Być może miałby miejsce jeden plik, który został przerwany podczas kopiowania, który byłby wspólny dla obu katalogów - i prawdopodobnie byłby zniekształcony.
Aby odkryć pliki, które były wspólne między dwoma katalogami, uruchomiłem:
~% sudo diff -r --report-identical-files my_data_on_60GB_partition/. /media/admin/mydata/. | grep identical | wc -l
14237
Ten wynik sugerował, że w katalogach źródłowym i docelowym było 14 237 takich samych plików, co potwierdziłem, sprawdzając pliki ręcznie - tak, w obu katalogach było wiele takich samych plików. Sugeruje to, że dopiero po mv
skopiowaniu wielkich kawałków plików wykonuje usuwanie plików źródłowych. Szybkie wyszukiwanie w info
na mv
komendzie wykazało
mv
Najpierw używa [ ] tego samego kodu, którego używa cp -a
do kopiowania żądanych katalogów i plików, a następnie (zakładając, że kopiowanie się powiedzie) usuwa oryginały. Jeśli kopiowanie nie powiedzie się, część skopiowana na partycję docelową zostanie usunięta.
Nie uruchomiłem polecenia, ale podejrzewam, czy spróbowałem uruchomić
sudo mv -i ~/my_data_on_60GB_partition/* /media/admin/my_data/
-i
Szybka przed zastąpienie prawdopodobnie byłby uruchamiany ponad 14.000 razy.
Następnie sprawdź, ile wszystkich plików w nowo utworzonym katalogu:
~% sudo find my_data_on_60GB_partition/ -type f -a -print | wc -l
14238
Zatem jeśli w nowym katalogu było 14238 zwykłych plików, a 14237 miało identyczne oryginały z powrotem w źródle, oznacza to, że w nowym katalogu był tylko jeden plik, który nie miał odpowiadającego identycznego pliku z powrotem w źródle. Aby dowiedzieć się, co to był plik, uruchomiłem rsync z powrotem w kierunku źródła:
~% sudo rsync -av --dry-run my_data_on_60GB_partition/ /media/admin/my_data
sending incremental file list
./
Education_learning_reference/
Education_learning_reference/Business_Education/
Education_learning_reference/Business_Education/Business_education_media_files/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/Jeff and David F interview/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/Jeff and David F interview/018 business plans-identifying main KPIs.flv
sent 494,548 bytes received 1,881 bytes 330,952.67 bytes/sec
total size is 1,900,548,824 speedup is 3,828.44 (DRY RUN)
Szybka kontrola potwierdziła, że był to zniekształcony plik, w którym plik istniał zarówno na źródłowym, jak i docelowym, docelowym pliku = 64 MB, oryginalnym = 100 MB. Ten plik i jego hierarchia katalogów były nadal własnością roota i nie przywrócono jeszcze oryginalnych uprawnień.
Podsumowując:
- wszystkie pliki, które
mv
nigdy nie dotarły, wciąż znajdują się w swoich oryginalnych lokalizacjach (oczywiście)
- wszystkie pliki, które zostały
mv
całkowicie skopiowane, nadal miały swoje oryginalne kopie w katalogu źródłowym
- plik, który został tylko częściowo skopiowany, nadal miał oryginał w katalogu źródłowym
Innymi słowy wszystkie oryginalne pliki pozostały nienaruszone, a rozwiązaniem w tym przypadku było po prostu usunięcie nowego katalogu!
Control-Z
(aby zatrzymać) zamiastControl-C
. W takim przypadku będzie można zobaczyć, który plik został w tym czasie przesłany, a więc wiedzieć, który plik został skopiowany tylko częściowo. Następnie możesz spokojnie zdecydować, jak postępować. (Użyjkill -stop
dla procesów spoza tty).