Właśnie straciłem niewielką część mojej kolekcji audio przez głupi błąd, który popełniłem. :-(
CHRONIONO Miałem dość nową kopię zapasową, ale wciąż była irytująca. Poza twoją naprawdę, innym sprawcą mv
, który popełnił błąd, było :
Pliki audio miały pewien schemat:
ARTIST - Some Title YY.mp3
gdzie YY
jest dwucyfrowa specyfikacja roku.
mkdir 90<invisible control character>
(Do tej pory nie wiedziałem, że wpisałem jedną trzecią nadmiaru znaku, który był niewidoczny ...!)
Zamiast mieć wszystko w jednym katalogu, chciałem mieć całą muzykę lat 90. w jednym katalogu. Więc napisałem:
find . -name '* 9?.mp3' -exec mv {} 90 \;
Nie tak trudno zrozumieć, co się stało, co? : ->
(katastrofalnym) wynikiem był dziewiczy pusty katalog o nazwie „90 coś ” (gdzie coś jest „niewidzialnym” znakiem kontrolnym) i jeden pojedynczy plik o nazwie „90”, nadpisany n razy.
Wszystkie pliki zniknęły. : - (((oczywiście)
Życzenie mv
to już sprawdzone w czasie, czy podpis „plik” docelowego (pamiętaj na * nix: Wszystko jest plikiem ) zaczyna się od d------
(na przykład drwxr-xr-x
). I oczywiście, czy cel w ogóle istnieje . Istnieje wariant wyżej wspomnianego scenariusza, w którym najpierw zapomniałeś o mkdir
katalogu. (ale oczywiście zakładałeś, że tam jest ...)
Nawet nasz pet-nienawiść OS począwszy od kapitału W robi to zrobić. Zostaniesz nawet poproszony o podanie typu miejsca docelowego (plik? Katalog?), Jeśli o to poprosisz.
Dlatego zastanawiam się, czy my * NIXers nadal musimy napisać sobie „ mv
skryptlet”, aby uniknąć tego rodzaju najbardziej niechcianych niespodzianek.
mv
nie jest tu problemem, technicznie rzecz biorąc, nie wie, że przenosisz serię plików. Uruchamiasz mv
jeden raz dla każdego pliku. Tak to find -exec ;
działa. Jeśli użył find -exec +
(jak w niektórych komentarzach) mv
będzie krzyczeć tak szybko, jak to ma więcej niż jeden argument.
mv
dla każdego pojedynczego pliku może początkowo wydawać się nieco mniej przemyślane, będzie (jak już powiedziałem wcześniej) jedynym rozsądnym rozwiązaniem, gdy pliki źródłowe zostaną rozproszone między różnymi podkatalogami. To, że w moim przypadku testowym wszystkie pliki źródłowe znajdowały się w jednym katalogu, nie oznacza, że to mój rzeczywisty przypadek testowy. W rzeczywistości jest to tylko uproszczenie, ponieważ później mogę z łatwością rozwinąć tę kwestię. Ponadto sprawia, że czytanie jest mniej czasochłonne ze względu na zmniejszoną długość. :)
mv
że miejsce docelowe istnieje? mv oldfile newfile
jest sposobem na zmianę nazwy pliku i głupie jest oczekiwanie, newfile
że już istnieje i będzie katalogiem.
.mp3
Powinna tam być przynajmniej jedna z nazwą90
, może to być ta, dla której nie masz kopii zapasowej.