Written by: Helio Loureiro
Category: Linux
Hits: 7559

Isso mesmo.  Olhando meus diretórios pra começar um backup, percebi que criei um arquivo com nome "-C".  Provavelmente resultando de alguma comando errado.

O que fazer nesse caso?  Em geral comandos como "rm" e "mv" não funcionam pois interpretam o "-C" como uma opção do comando, não como arquivo.

Existem várias formas de resolver isso, inclusive algumas mais fáceis via interface gráfica usando nautilus/dolphin ou algo do gênero.  Mas vou mostrar a "forma UNIX" de resolver isso.

Primeiramente, onde está o danado do arquivo?

helio@linux:home$ ls
backup -C helio fisl lost+found support

No caso estava no meu diretório "/home".  E o que era o arquivo?

helio@linux$ home# ls -l
total 646124
drwxr-xr-x 2 root root 4096 Nov 21 09:41 backup
-rw-r--r-- 1 root root 661555200 Oct 9 12:05 -C
drwxr-xr-x 367 helio linux 36864 Nov 21 09:43 helio
drwxr-xr-x 6 fisl fisl 4096 Mar 5 2014 fisl
drwx------ 2 root root 16384 Nov 16 2013 lost+found
drwxr-xr-x 5 support admin 4096 May 17 2013 support

Agora vem o truque.  Cada arquivo criado no seu filesystem tem junto um número de i-node, que é onde ele foi efetivamente gravado no disco.  É possível usar a opção "-i" do comando "ls" pra verificar cada número de i-node de cada arquivo do diretório, seja um arquivo, seja um diretório, ou seja qualquer outra coisa (em Unix, tudo é arquivo).

root@linux:home# ls -i
15335425 backup 4741 -C 16252929 helio 14942209 fisl 11 lost+found 15466497 support

Verificado qual o número do i-node, 4741, agora é usar o comando "find" com opção de "-inum" pra mexer nesse arquivo, junto com um "-exec".  Na opção "-exec", o arquivo encontrado é substituído pelo "{}", que é como se fosse uma variável com o que foi encontrado pelo parâmetros anteriores, no caso o "-inum".  

Então basta usar isso pra renomear o arquivo pra qualquer outro nome.

root@linux:home# find . -maxdepth 1 -inum 4741 -exec mv {} arquivo_alien \;

Verificando...

root@linux:home# ls
backup helio fisl lost+found support arquivo_alien

Agora descobrindo o que é esse arquivo.

root@linux:home# file arquivo_alien
arquivo_alien: POSIX tar archive (GNU)
root@linux:home# mv arquivo_alien arquivo_alien.tar
root@linux:home# tar tvf arquivo_alien.tar
drwxr-xr-x root/root 0 2014-10-09 12:05 home/
drwxr-xr-x fisl/fisl 0 2014-03-05 10:16 home/fisl/
drwxr-xr-x fisl/fisl 0 2014-03-05 10:16 home/fisl/.purple/
-rw-r--r-- fisl/fisl 173 2014-03-05 10:16 home/fisl/.purple/blist.xml
drwxr-xr-x fisl/fisl 0 2013-07-04 22:21 home/fisl/.purple/certificates/

Realmente um arquivo do tipo tar.  Provavelmente de algum backup que tentei fazer e passei a opção de forma errado.  Sem stress e problema resolvido.

root@linux:home# rm arquivo_alien.tar