Renomear arquivo contendo espaços e sinais de pontuação

2

Alguém em nosso servidor Global Linux 3.0.31-0.9 colocou um arquivo com vários espaços, parênteses, ponto de interrogação e dois pontos em seu nome.

E estou a fim de renomeá-lo ou removê-lo!

Exemplo do nome do arquivo e dos comandos que tentei remover / renomear o arquivo para "sem sentido" está anexado aqui .

Minha ls output:

-rw-r--r--  1 root   root       11306 May  2 03:25 who suggesting to assign this issue to the group which is responsible for the application StreamServe. (Probably it is operated by Linq????:q
-rw-------  1 root   root       15797 Jun 12 12:59 .viminfo
-rw-------  1 root   root        1200 Jun 12 13:00 .lesshst
drwxrwxrwx 32 root   root        4096 Jun 13 00:00 .snapshot
-rw-------  1 root   root       32976 Jun 13 14:05 .bash_history
    
por RustyNails 13.06.2015 / 14:32

2 respostas

2

Colocar o nome do arquivo em questão entre aspas é provavelmente a maneira mais fácil de removê-lo ou renomeá-lo. Primeiro crie um arquivo de teste:

rm "   -myfile(1):ok?"

Se um arquivo simplesmente começar com um hífen, use "-" para informar ao comando que não existem mais opções e que o hífen principal é um argumento de comando:

rm -- -myfile

Nos casos em que o nome do seu arquivo tiver caracteres não imprimíveis, você poderá removê-lo com find , tendo determinado seu número de inode:

find . -iname "*myfile*" -exec ls -i {} +

9225180 ./ -myfile (1): ok?

find . -inum 9225180 -exec rm -i {} +

remove ./ -myfile (1): ok ??

Adicionar a resposta -i (interativa) a comandos como rm permite confirmar se você está operando na entidade que deseja primeiro.

    
por 13.06.2015 / 14:57
3

A maneira fácil de agir em um arquivo com um nome difícil de digitar é usar a conclusão. Neste caso, como os primeiros caracteres do nome são fáceis de digitar, digite-os e pressione Tab .

$ mv whoTab found.txt

Se você não conseguiu determinar o primeiro caractere, você pode pressionar Tab após ./ , para percorrer todos os nomes de arquivos no diretório atual.

O comando de conclusão do shell irá gerar uma string entre aspas, usando ' ou \ ou como está programado.

Como alternativa, você mesmo pode criar esta string entre aspas. Dentro de aspas simples, todos os caracteres são interpretados normalmente, exceto uma simples citação. Portanto, se o nome do arquivo não contiver uma aspa simples, cole-o entre aspas simples - mas você precisa ter o nome do arquivo real (conforme impresso por ls --show-control-chars ), não o nome do arquivo com alguns caracteres não-imprimíveis substituídos. Se houver uma única citação no nome do arquivo, substitua-a por '\'' (aspas simples, contrabarra, aspas simples, aspas simples). Por exemplo, para um arquivo chamado it's , você pode usar 'it'\''s' .

Como alternativa, você pode criar um padrão de curinga que corresponda somente a esse arquivo. Por exemplo, neste caso:

$ ls -d w*
who suggesting to assign this issue to the group which is responsible for the application StreamServe. (Probably it is operated by Linq????:q
wibble

No meu exemplo, há dois arquivos correspondentes, portanto, o curinga não é bom o suficiente. Adicionando um personagem corta.

$ ls -d wh*
who suggesting to assign this issue to the group which is responsible for the application StreamServe. (Probably it is operated by Linq????:q
mv who* found.txt

Se o primeiro caractere não puder ser impresso, você poderá escolher outro padrão que corresponda a uma parte diferente do nome. Você pode usar um padrão como [!#-z]* ou [!0-9A-Z_a-z]* ou [![:alnum:]]* , que exclui caracteres normalmente usados no início de um nome de arquivo.

Se o nome do arquivo começar com - (traço ou hífen ASCII), ele poderá ser interpretado como uma opção. Use ./-wibble para evitar isso.

    
por 14.06.2015 / 19:51