O que aconteceu quando eu “mv *”? Nenhum erro foi mostrado e agora resta apenas uma pasta. Por quê?

12

O comando executado foi "mv space *" em uma pasta com 14 GB de dados.

mv *

du -hs 

é o mesmo, então para onde foram os 14 GB de dados? O que eu fiz?

    
por user3032965 18.04.2014 / 10:47

2 respostas

30

Meu palpite é que o bash expande o curinga e, portanto, move cada pasta para a última.

Por exemplo:

$ ls
test1  test2  test3  test4

$ mv *

$ ls
test4

$ ls test4
test1  test2  test3

Aqui, mv * é expandido para mv test1 test2 test3 test4 correspondente ao formato mv [OPTION]... SOURCE... DIRECTORY . Assim, cada pasta é movida para a última.

    
por 18.04.2014 / 11:11
2

Conforme descrito por @ssssteffff, com mv * , o shell está fazendo uma expansão de curingas a partir de arquivos no diretório atual. No entanto, o comportamento do comando mv depende de quantos argumentos * se expande para. Se houver mais de dois argumentos, o último argumento deve ser um diretório:

   mv [OPTION]... SOURCE... DIRECTORY

Então,

Eu criei 5 arquivos

$ touch 1 2 3 4 5
$ ls
1  2  3  4  5
$ mv *
mv: target ‘5’ is not a directory
$ ls
1  2  3  4  5

Agora, se eu criar um diretório que venha como último parâmetro para a expansão do curinga, então:

$ mkdir 6
$ mv *
$ ls
6
$ ls 6
1  2  3  4  5

Você deve verificar novamente qual foi o último argumento.

  • Se o último argumento foi um diretório, então seus dados talvez estejam seguros.
  • Se o número total de argumentos fosse 2 e o último argumento fosse um diretório, seus dados talvez sejam seguros.
  • Se o número total de argumentos fosse 2 e o último argumento fosse um arquivo, o segundo arquivo desapareceria com certeza.

Tem certeza de que não viu o erro algo assim?

 mv: target ‘5’ is not a directory'
    
por 19.04.2014 / 17:55

Tags