Ho appena perso una piccola parte della mia collezione audio, per uno stupido errore che ho fatto. :-(
GLADLY Ho avuto un backup abbastanza recente, ma era ancora irritante. A parte il tuo, l'altro colpevole che stava facendo il male era mv
, che mostrerà come segue:
I file audio avevano un certo schema:
ARTIST - Some Title YY.mp3
dove YY
è la specifica dell'anno a 2 cifre.
mkdir 90<invisible control character>
(Fino a questo momento, non sapevo di aver effettivamente digitato un terzo carattere in eccesso che era invisibile ...!)
Invece di avere tutto in una directory, volevo avere tutta la musica degli anni '90 in una directory. Quindi ho scritto:
find . -name '* 9?.mp3' -exec mv {} 90 \;
Non è così difficile farsi un'idea di cosa è successo eh? : ->
Il risultato (disastroso) fu una directory vuota vergine chiamata '90 qualcosa '(con qualcosa che era il carattere di controllo "invisibile") e un singolo file chiamato' 90 ', sovrascritto n volte.
TUTTI I FILE SONO STATI ANDATI. : - (((ovviamente)
Wish mv
avrebbe verificato in tempo se la firma del "file" di destinazione (ricordare su * NIX: Everything Is A File ) inizia con un d------
(es drwxr-xr-x
.). E, naturalmente, se la destinazione esiste affatto. C'è una variante dello scenario di cui sopra, quando è sufficiente dimenticato per mkdir
la directory prima. (ma ovviamente hai pensato che fosse lì ...)
Anche il nostro sistema operativo che odia gli animali domestici a partire dalla capitale W FA QUESTO. Ti viene persino richiesto di specificare il tipo di destinazione (file? Directory?) Se lo chiedi.
Quindi, mi chiedo se noi * NIXer dobbiamo ancora scrivere uno " mv
scriptlet" solo per evitare questo tipo di sorprese più indesiderate.
mv
non è il problema qui, tecnicamente, non sa che stai spostando una serie di file. Stai eseguendo mv
una volta per ogni file. find -exec ;
Funziona così . Se avessi usato find -exec +
(come in alcuni dei commenti) mv
avresti urlato non appena avesse ottenuto più di un argomento.
mv
per ogni singolo file possa sembrare inizialmente un po 'meno elaborato, sarà (come ho detto in precedenza) l'unica soluzione sana una volta che i file di origine sono sparsi tra le varie sottodirectory. Che nel mio caso di test, i file di origine fossero tutti in una directory non significa che sia il mio vero caso di test. In realtà è solo una semplificazione, perché potrei facilmente approfondire da solo in seguito. Inoltre, rende le domande meno dispendiose in termini di tempo a causa della loro lunghezza ridotta. :)
mv
di richiedere l'esistenza della destinazione? mv oldfile newfile
è il modo di rinominare un file ed è sciocco aspettarsi newfile
di esistere già ed essere una directory.
.mp3
dovrebbe essere lì con il nome90
, potrebbe essere stato uno per il quale non hai avuto un backup.