Mover arquivos e pastas acidentalmente para lugares inexistentes
Pergunta
Costumo fazer o comando como:
mv folder $something_that_does_not_exist
mv files* $something_that_does_not_exist
Então, eu percebo que meus arquivos são ido. Eu não posso vê-los mesmo na pasta "$ something_that_does_not_exist". Onde meus arquivos e pastas foram? Como posso recuperá-los?
Solução
A fim de evitar esse problema, eu tenho o hábito de sempre acrescentar a / ao final de nomes de diretórios ao usar cp
ou mv
:
$ touch foo
$ mv foo bar/
mv: cannot move `foo' to `bar/foo': No such file or directory
Sem a barra final, mv
faz uma operação de arquivo de mudança de nome. Você pode achar que o seu arquivo (s) mudaram o nome.
Outras dicas
Se $something_that_does_not_exist
expande para nada (mas eu não tenho certeza se esse é o seu problema?), Então o primeiro mv falhará. O segundo comando mv também falhará a menos que "files*"
expandir para exatamente dois arquivos ou se se expande nome do último arquivo "files*"
a passa a ser um diretório. Em seguida, os arquivos serão movidos para o diretório.
Se o comando está em um script e você quer que seu script para abortar quando se tenta expandir a variável e não está definido, você pode usar o modificador de ponto de interrogação. Exemplo:
$ echo ${DISPLAY?}; echo display
:0.0
display
$ echo ${MYTEST?}; echo mytest
bash: MYTEST: parameter null or not set
$
Então, se você usar
mv folder ${something_that_does_not_exist?}
e something_that_does_not_exist
não estiver definida, os comandos a seguir não será executada.
Você não será capaz de obter seus arquivos de volta, como o shell irá expandir seus arquivos e eu acredito que o último arquivo na lista será agora chamado $ something_that_does_not_exist.
Todos os seus outros arquivos na lista terá sido substituído. Então você não pode recuperá-los.
EDIT: No meu smoothwall VM (! O único GNU / Linux em meus dedos agora) fico com esta:
$ mkdir t1
$ mv t1 t2
$ ls
t2/
$ mv t2 t1
$ cd t1
$ touch f1 f2 f3 f4
$ mv f* ../t2
mv: target `../t2' is not a directory
mv folder $something_that_does_not_exist
Este deveria ser um erro:
$ mkdir folder
$ mv folder
mv: Insufficient arguments (1)
Usage: mv [-f] [-i] f1 f2
mv [-f] [-i] f1 ... fn d1
mv [-f] [-i] d1 d2
O outro caso depende do que files*
combinado:
mv files* $something_that_does_not_exist
Se o jogo final é um diretório, você provavelmente vai encontrar seus arquivos lá. Caso contrário, você vai ter quer renomeado o primeiro arquivo a ser o mesmo que o segundo ou tinha outro erro como acima.
1) Você tenta mover a "pasta" diretório:
mv folder abcde
Se "ABCDE" é um diretório existente, ele vai passar "pasta" em "ABCDE". Se "ABCDE" é um arquivo existente, o comando falhará. Caso contrário ele irá renomear "pasta" para "ABCDE".
2) Você tentar mover alguns arquivos:
mv files* abcde
Se "ABCDE" é um diretório existente, ele irá mover os arquivos "*" para "ABCDE". Caso contrário, se houver apenas um arquivo "arquivos *" correspondência, ele irá renomear o arquivo para "ABCDE". Caso contrário, o comando falhará.