Como faço para recuperar arquivos após "mv * .*"?

Como faço para recuperar arquivos após "mv * .*"?

Escondi alguns arquivos usando o comando:

mv * .*

mas agora não consigo encontrá-los. Eu tentei usar:

mv .* *

mas nada aconteceu (um erro foi mostrado). Se eu correr:

ls -la

está mostrando:

total 8  
drwxrwxr-x 2 abhishek abhishek 4096 Mar  9 20:46 .  
drwxrwxr-x 4 abhishek abhishek 4096 Mar  9 20:46 ..  

Existe alguma maneira de recuperar meus arquivos ocultos?

Responder1

Seus arquivos não estão ocultos, você moveu todos os arquivos (e diretórios, se houver) um diretório acima.

Isso acontece porque mv * .*não funcionará como você pensa. O comando mvmoverá apenas um arquivo para um arquivo (renomear) ou moverá um ou vários arquivos para um diretório. Ele não moverá vários arquivos para vários arquivos com alguma renomeação inteligente.


O que aconteceu?

Vamos supor que temos um diretório e 3 arquivos em nosso diretório:

dir1
file1
file2
file3

Alguns Shells (por exemplo bash, dash, ...) expandirão seu comando para:

mv dir1 file1 file2 file3 . ..

Seu comando expandido se enquadra na segunda forma da SINOPSE que você encontra em man mv:

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

Observe o .e ..:

  • .é o diretório atual,
  • ..está um diretório acima.

O comando significa: mover dir1, file1e file2e file3para .; ..Também ocorrerá essencialmente um erro, algo como:

mv: cannot move '.' to '../.'

Mas como você tem permissão de gravação nesse diretório, todos os outros arquivos foram movidos. Você pode encontrar seus arquivos em ..(= um diretório acima). No entanto, os arquivos com o mesmo nome foram substituídos e você não saberá quais arquivos estavam em qual diretório antes.


Se você tivesse um subdiretório .hidden-dir, ele teria se expandido para:

mv dir1 file1 file2 file3 . .. .hidden-dir

Então, todos os arquivos teriam sido movidos para .hidden-dir. No entanto, este não parece ser o seu caso, porque você teria visto .hidden-direm sua ls -lasaída.


Como consertar

Correr:

mv ../dir1 ../file1 ../file2 ../file3 .

No entanto, você precisa saber os nomes.


O que você deveria ter usado

mmv '*' '.#1'

ou

rename 's/^/./' *

informação relacionada