Щойно дурною помилкою я лише втратив невелику частину своєї аудіоколекції. :-(
ГЛАДНО У мене була досить недавна резервна копія, але вона все ще дратувала. Окрім вашого справді, інший винуватець, який робив лихоліття 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, це могло бути таке, на яке у вас не було резервної копії.