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 YYjest 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 mvto 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 mkdirkatalogu. (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 „ mvskryptlet”, aby uniknąć tego rodzaju najbardziej niechcianych niespodzianek.
mvnie jest tu problemem, technicznie rzecz biorąc, nie wie, że przenosisz serię plików. Uruchamiasz mvjeden 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.
mvdla 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 newfilejest sposobem na zmianę nazwy pliku i głupie jest oczekiwanie, newfileże już istnieje i będzie katalogiem.
.mp3Powinna tam być przynajmniej jedna z nazwą90, może to być ta, dla której nie masz kopii zapasowej.