move um diretório com um único caractere (retrocesso) como seu nome [duplicado]

3

Como posso mover um diretório cujo nome é apenas um espaço?

ls -lah
drwx------  4 user1 user1 8.0K Mar 13 14:16 .
drwxr-xr-x  3 root  root    60 Mar 13 13:48 ..
drwx------ 18 user1 user1 4.0K Mar 13 11:18  

É o trabalho de um vírus, e eu gostaria de desfazer isso.

Atualização: não sei ao certo qual é esse caractere. Como eu tento movê-lo como um espaço, e isso não funciona

$mv ' ' test
mv: cannot stat ' ': No such file or directory

Atualização: Esta não é uma duplicata de exclui um arquivo sem nome , embora o diretório e o arquivo se comportem de maneira muito semelhante neste caso.

    
por Saeed 13.03.2013 / 11:56

5 respostas

4

Uma possível abordagem é encontrar o número de inode do diretório e usá-lo para mv it. Você não nos diz qual plataforma você está usando, então você pode precisar modificar essas sugestões para se adequar às ferramentas disponíveis para você (estou no FreeBSD).

Use seu utilitário ls para obter o número do inode - a opção -i faz isso no FreeBSD:

$ ls -i
106739 test

( test é um diretório vazio que acabei de criar para ilustrar essa solução)

Agora, você pode usar o utilitário find para encontrar o diretório com o número do inode:

$ find . -inum 106739
./test

E para mover o diretório problemático:

$ find . -inum 106739 -exec mv {} fixed \;
find: ./test: No such file or directory

Não se preocupe com a mensagem de erro - isso acontece porque o índice do diretório muda durante a execução do comando, então find fica um pouco confuso; o diretório foi renomeado para fixed :

$ find . -inum 106739
./fixed

Como eu disse, você pode precisar consultar sua documentação local para obter os switches certos, mas essa abordagem deve funcionar.

    
por 13.03.2013 / 12:53
2

Você pode usar:

mv ' ' <where you want to move>
    
por 13.03.2013 / 11:58
0

Você precisa descobrir o que é chamado, talvez por algo como

ls | od -c

Outra coisa a tentar é algo como mv ? somewhere (se o nome for um caractere), mv ?? somewhere (se tiver dois), ... O comando od(1) acima deve informar o tamanho ou ls -b de resultados.

Se o nome realmente for '' (um espaço), mv ' ' somewhere funcionará.

    
por 13.03.2013 / 14:55
0

Você pode fazer isso executando estes comandos:

$ mv " "  ..target..

$ ls -al
-rw-r--r--  1 yupadhya Domain Users..0 Mar 13.. 19:28
drwxr-xr-x+ 1 yupadhya Domain Users     0 Mar 13 19:28 .
drwxrwxrwt+ 1 yupadhya Domain Users     0 Mar 12 10:19 ..
-rwxr-xr-x  1 yupadhya Domain Users  1494 Mar 12 10:16 .bash_profile
-rwxr-xr-x  1 yupadhya Domain Users  6054 Mar 12 10:16 .bashrc

$ mv /home

$ ls -al
total 8
-rw-r--r--  1 yupadhya Domain Users 0 Mar 13 19:28
drwxrwxrwt+ 1 yupadhya Domain Users 0 Mar 13 19:29 .
drwxr-xr-x+ 1 yupadhya Domain Users 0 Mar 12 13:14 ..

$ pwd
/home
    
por 13.03.2013 / 15:02
0

Use o símbolo do dólar para impedir que o caractere de espaço seja analisado, por exemplo

mv $' ' /path/to/folder

Caso contrário, não seria tratado como um parâmetro.

    
por 14.03.2013 / 02:34