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?

Foi útil?

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á.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top