Je viens de perdre une petite partie de ma collection audio, par une stupide erreur que j'ai commise. :-(
GLADLY J'ai eu une sauvegarde assez récente, mais c'était toujours énervant. À part le vôtre vraiment, l'autre coupable était le méfait mv
, ce qui se manifestera comme suit:
Les fichiers audio avaient un certain schéma:
ARTIST - Some Title YY.mp3
où YY
est la spécification de l'année à 2 chiffres.
mkdir 90<invisible control character>
(Jusqu'à ce moment, je ne savais pas que j'avais en fait tapé un tiers de caractère en excès qui était invisible ...!)
Au lieu d'avoir tout dans un répertoire, je voulais avoir toutes les musiques des années 90 dans un seul répertoire. J'ai donc tapé:
find . -name '* 9?.mp3' -exec mv {} 90 \;
Pas si difficile de savoir ce qui s'est passé hein? : ->
Le résultat (désastreux) était vierge vide répertoire appelé '90 quelque chose »(avec quelque chose étant le caractère de contrôle « invisible ») et un seul fichier appelé « 90 », écrasés n fois.
TOUS LES FICHIERS SONT DISPARUS. :-(( (évidemment)
Wish mv
aurait vérifié à temps si la signature du "fichier" de destination (rappelez-vous sur * NIX: Everything Is A File ) commence par un d------
(par exemple drwxr-xr-x
). Et, bien sûr, si la destination existe . Il existe une variante du scénario ci - dessus, lorsque vous simplement oublié de mkdir
le répertoire en premier. (mais bien sûr, vous supposiez que c'est là ...)
Même notre système d'exploitation pour animaux de compagnie, à commencer par la capitale, W LE FAIT. Vous êtes même invité à spécifier le type de destination (fichier? Répertoire?) Si vous le demandez.
Par conséquent, je me demande si nous * NIXers devons encore nous écrire un " mv
scriptlet" juste pour éviter ce genre de surprises les plus indésirables.
mv
n'est pas le problème ici, techniquement, il ne sait pas que vous déplacez une série de fichiers. Vous exécutez mv
une seule fois pour chaque fichier. Voilà comment ça find -exec ;
marche. Si vous aviez utilisé find -exec +
(comme dans certains des commentaires) mv
aurait crié dès qu'il a reçu plus d'un argument.
mv
de chaque fichier puisse sembler un peu moins réfléchie au premier abord, ce sera (comme je l'avais dit précédemment) la seule solution sensée une fois que les fichiers source seront dispersés dans divers sous-répertoires. Que dans mon cas de test, les fichiers sources soient tous dans un seul répertoire ne signifie pas que c'est mon cas de test réel . Il s'agit en fait d'une simple simplification, car je pourrai peut-être m'étendre sur ce sujet plus tard. De plus, la lecture des questions prend moins de temps en raison de leur longueur réduite. :)
mv
à exiger que la destination existe? mv oldfile newfile
est le moyen de renommer un fichier, et il est stupide de s'attendre newfile
à exister déjà et à être un répertoire.
.mp3
devrait être là avec le nom90
, il aurait pu y en avoir un pour lequel vous n'aviez pas de sauvegarde.