Щойно дурною помилкою я лише втратив невелику частину своєї аудіоколекції. :-(
ГЛАДНО У мене була досить недавна резервна копія, але вона все ще дратувала. Окрім вашого справді, інший винуватець, який робив лихоліття mv
, виявив наступне:
Звукові файли мали певну схему:
ARTIST - Some Title YY.mp3
де YY
є двозначний специфікація року.
mkdir 90<invisible control character>
(До цього моменту я не знав, що насправді я набрав третину зайвого символу, який був невидимим ...!)
Замість того, щоб мати все в одному каталозі, я хотів, щоб усі музики 1990-х були в одному каталозі. Тому я набрав:
find . -name '* 9?.mp3' -exec mv {} 90 \;
Не так складно зрозуміти, що сталося, а? : ->
Результатом (катастрофічним) був порожній каталог незайманих під назвою "90 щось " ( дещо було "невидимим" символом керування) та один єдиний файл під назвою "90", перезаписаний n разів.
ВСІ ФАЙЛИ БУЛИ ОСТАННІ. : - ((очевидно)
Хотів mv
би вчасно перевірити, чи не починається підпис цільового "файлу" (пам'ятайте в * NIX: Everything Is A File ) з d------
(наприклад drwxr-xr-x
). І, звичайно, чи взагалі існує місце призначення . Існує варіант вищезазначеного сценарію, коли ви просто забули в mkdir
директорію першим. (але, звичайно, ви припускали, що він є там ...)
Навіть наша ОС, що ненавидить домашніх тварин, починаючи з великої літери . Вам навіть буде запропоновано вказати тип призначення (файл? Каталог?), Якщо ви попросите його.
Отже, мені цікаво, чи нам * NIXers все-таки доводиться писати собі « mv
скриплет» тільки для того, щоб уникнути подібних видів найбільш небажаних сюрпризів.
mv
Тут не проблема, технічно це не знає, що ви переміщуєте серію файлів. Ви працюєте mv
один раз для кожного файлу. Ось як find -exec ;
працює. Якби ви використовували find -exec +
(як у деяких коментарях) , кричали mv
б , як тільки отримали більше одного аргументу.
mv
для кожного окремого файлу спочатку може здатися трохи менш продуманим, він (як я вже говорив раніше) буде єдиним розумним рішенням, коли вихідні файли будуть розкидані між різними підкаталогами. Те, що в моєму тестовому випадку всі вихідні файли були в одному каталозі, не означає, що це мій фактичний тестовий випадок. Насправді це просто спрощення, тому що пізніше я можу легко розробити це самостійно. Крім того, це робить питання менш трудомісткими для читання через скорочення. :)
mv
вимагати існування пункту призначення? mv oldfile newfile
це спосіб перейменувати файл, і нерозумно сподіватися newfile
на те, що він уже існує та буде каталогом.
.mp3
повинен бути там із ім'ям90
, це могло бути таке, на яке у вас не було резервної копії.