Acabo de perder una pequeña parte de mi colección de audio, por un estúpido error que cometí. :-(
DIVERTIDO Tenía una copia de seguridad bastante reciente, pero aún así era irritante. Aparte de la suya, el otro culpable que hizo la travesura fue mv
, que se mostrará de la siguiente manera:
Los archivos de audio tenían un cierto esquema:
ARTIST - Some Title YY.mp3
donde YY
es la especificación año de 2 dígitos.
mkdir 90<invisible control character>
(¡Hasta este momento, no sabía que había escrito un tercer carácter en exceso que era invisible ...!)
En lugar de tener todo en un directorio, quería tener toda la música de los 90 en un solo directorio. Entonces escribí:
find . -name '* 9?.mp3' -exec mv {} 90 \;
No es tan difícil de conseguir la idea de lo que sucedió eh? : ->
El (desastroso) resultado fue una virgen vacío directorio llamado '90 algo '(con algo de ser el carácter de control 'invisible') y un solo archivo llamado '90', sobrescritos n veces.
TODOS LOS ARCHIVOS habían desaparecido. : - (((obviamente)
Wish mv
hubiera verificado a tiempo si la firma del "archivo" de destino (recuerde en * NIX: Everything Is A File ) comienza con un d------
(por ejemplo drwxr-xr-x
). Y, por supuesto, si el destino existe en absoluto. Hay una variante del escenario antes mencionado, en las que simplemente se olvidó de mkdir
la guía en primer lugar. (pero por supuesto, asumiste que está ahí ...)
Incluso nuestra mascota OS-odio empezando por la capital W hace este. Incluso se le solicita que especifique el tipo de destino (¿archivo? ¿Directorio?) Si lo solicita.
Por lo tanto, me pregunto si nosotros * NIXers todavía tenemos que escribirnos un " mv
scriptlet" solo para evitar este tipo de sorpresas no deseadas.
mv
no es el problema aquí, técnicamente, no sabe que usted está en movimiento una serie de archivos. Está ejecutando mv
una vez para cada archivo. Así es como find -exec ;
funciona. Si lo hubiera usado find -exec +
(como en algunos de los comentarios) mv
habría gritado tan pronto como recibiera más de un argumento.
mv
de cada archivo puede parecer un poco menos pensada al principio, será (como dije anteriormente) la única solución sensata una vez que los archivos de origen estén dispersos entre varios subdirectorios. Que en mi caso de prueba, los archivos de origen estaban todos en un directorio no significa que sea mi caso de prueba real . Es, de hecho, sólo una simplificación, porque puede elaborar fácilmente en que por mi cuenta más adelante. Además, se hace preguntas menos tiempo para leer debido a su longitud reducida. :)
mv
requerir que exista el destino? mv oldfile newfile
es la forma de cambiar el nombre de un archivo, y es una tontería esperar newfile
que ya exista y sea un directorio.
.mp3
debería estar allí con el nombre90
, podría haber sido uno para el que no tenía una copia de seguridad.