Acabei de perder uma pequena parte da minha coleção de áudio, por um erro estúpido que cometi. :-(
Felizmente, eu tinha um backup relativamente recente, mas ainda era irritante. Além do seu, o outro culpado foi o que causou a travessura mv
, que mostrará o seguinte:
Os arquivos de áudio tinham um certo esquema:
ARTIST - Some Title YY.mp3
onde YY
é a especificação do ano com 2 dígitos.
mkdir 90<invisible control character>
(Até o momento, eu não sabia que havia digitado um terceiro caractere em excesso que era invisível ...!)
Em vez de ter tudo em um diretório, eu queria ter todas as músicas dos anos 90 em um diretório. Então eu digitei:
find . -name '* 9?.mp3' -exec mv {} 90 \;
Não é tão difícil entender o que aconteceu, não é? : ->
O resultado (desastroso) foi um diretório vazio virgem chamado '90 something '(com algo sendo o caractere de controle "invisível") e um único arquivo chamado' 90 ', sobrescrito n vezes.
Todos os arquivos foram embora. :-(( (obviamente)
Desejo mv
teria verificado no tempo se a assinatura do "arquivo" de destino (lembre-se em * NIX: Tudo é um arquivo ) começa com um d------
(por exemplo drwxr-xr-x
). E, é claro, se o destino existe . Existe uma variante do cenário acima mencionado, quando você simplesmente esqueceu-se para mkdir
o diretório em primeiro lugar. (mas é claro, você assumiu que está lá ...)
Mesmo o nosso OS pet-ódio começando com a capital W faz isso. Você é solicitado a especificar o tipo de destino (arquivo? Diretório?), Se solicitar.
Por isso, estou me perguntando se nós * NIXers ainda temos que escrever um " mv
scriptlet" para evitar esse tipo de surpresa indesejável.
mv
não é o problema aqui, tecnicamente, ele não sabe que você está movendo uma série de arquivos. Você está executando mv
uma vez para cada arquivo. É assim que find -exec ;
funciona. Se você tivesse usado find -exec +
(como em alguns dos comentários) mv
teria gritado assim que recebesse mais de um argumento.
mv
de cada arquivo possa parecer um pouco menos pensada a princípio, ela (como eu havia dito anteriormente) será a única solução sã quando os arquivos de origem estiverem espalhados entre vários subdiretórios. Que no meu caso de teste, os arquivos de origem estavam todos em um diretório, não significa que esse seja o meu caso de teste real . Na verdade, é apenas uma simplificação, porque eu posso elaborar isso sozinho depois. Além disso, torna as perguntas menos demoradas para ler devido ao tamanho reduzido. :)
mv
exigir que o destino exista? mv oldfile newfile
é a maneira de renomear um arquivo, e é bobagem esperar newfile
já existir e ser um diretório.
.mp3
deve estar lá com o nome90
, poderia ter sido aquele para o qual você não tinha um backup.