Como manipular nomes de arquivos com espaços e caracteres especiais no Linux

Como manipular nomes de arquivos com espaços e caracteres especiais no Linux

Encontramos o nome de arquivos e pastas regularmente. Na maioria dos casos, o nome do arquivo/pasta está relacionado ao conteúdo do arquivo/pasta e começa com o número e os caracteres. O nome do arquivo alfa-numérico é bastante comum e amplamente usado, mas esse não é o caso quando temos que lidar com o nome de arquivo/pasta que tem caracteres especiais.

Observação: Podemos ter arquivos de qualquer tipo, mas por simplicidade e fácil implementação, estaremos lidando com o arquivo de texto (.TXT), durante todo o artigo.

O exemplo dos nomes de arquivos mais comuns são:

abc.txt Avi.TXT Debian.TXT… 

Exemplo de nomes de arquivos numéricos são:

121.TXT 3221.TXT 674659.TXT… 

Exemplo de nomes de arquivos alfa-numéricos são:

EG84235.txt 3kf43nl2.TXT 2323DDW.TXT… 

Exemplos de nomes de arquivos que têm caráter especial e não são muito comuns:

#232.txt #bkf.TXT #BJSD3469.TXT #121NKFD.TXT -2232.txt -fbjdew.txt -gi32kj.txt --321.txt - -bk34.TXT… 

Uma das perguntas mais óbvias aqui é - quem na Terra cria/lida com o nome de arquivos/pastas com um hash (#), Um semi-Colon (;), um traço (-) ou qualquer outro personagem especial.

Eu concordo com você, que esses nomes de arquivos não são comuns ainda seu shell não deve quebrar/desistir quando você precisar lidar com esses nomes de arquivos. Também falando tecnicamente, tudo, seja a pasta, driver ou qualquer outra coisa, é tratado como arquivo no Linux.

Lidar com o arquivo que tem traço (-) em seu nome

Crie um arquivo que comece com um traço (-), dizer -ABX.TXT.

$ touch -ABC.TXT 
Saída de amostra
Touch: Opção inválida -'B' Tente 'Touch -Help' para obter mais informações. 

O motivo do erro acima, esse shell interpreta qualquer coisa depois de uma corrida (-), como opção, e obviamente não existe essa opção, portanto é o erro.

Para resolver esse erro, temos que dizer ao shell Bash (sim, isso e a maioria dos outros exemplos no artigo é para Bash) para não interpretar nada após o personagem especial (aqui traço), como opção.

Existem duas maneiras de resolver este erro como:

$ touch --ABC.txt [opção #1] $ touch ./-abc.txt [opção #2] 

Você pode verificar o arquivo assim criado pelas duas maneiras acima, executando comandos ls ou ls -l para longa listagem.

$ ls -l Total 0 -rw-r-1 Avi Avi 0 8 de junho 11:05 -abc.TXT 

Para editar o arquivo acima que você pode fazer:

$ nano --ABC.txt ou $ nano ./-abc.TXT 

Observação: Você pode substituir Nano com qualquer outro editor de sua escolha, diga vim como:

$ vim --ABC.txt ou $ vim ./-abc.TXT 

Da mesma forma, para mover esse arquivo que você deve fazer:

$ MV --ABC.txt -a.txt ou $ mv --a.txt -ABC.TXT 

E para excluir este arquivo, você precisa fazer:

$ rm --ABC.txt ou $ rm ./-abc.TXT 

Se você tiver muitos arquivos em uma pasta cujo nome contém Dash e deseja excluir todos eles de uma só vez, faça o que:

$ rm ./-* 
Importante observar:

1. A mesma regra discutida acima segue para qualquer número de hypen em nome do arquivo e sua ocorrência. Viz., -abc.TXT, abc.TXT, abc-.TXT, etc.

2. A mesma regra discutida acima segue o nome da pasta com qualquer número de hipen e sua ocorrência, exceto o fato de que, para excluir a pasta, você deve usar 'rm -rf' como:

$ rm -rf --ABC ou $ rm -rf ./-abc 

Lidar com arquivos com hash (#) no nome

O símbolo # tem um significado muito diferente em Bash. Qualquer coisa depois de um # é interpretado como comentário e, portanto, negligenciado por Bash.

Entenda usando exemplos:

criar um arquivo #abc.TXT.

$ touch #abc.TXT 
Saída de amostra
Touch: Operando de arquivo ausente Tente 'Touch -Help' para obter mais informações. 

O motivo do erro acima, esse Bash está interpretando #abc.TXT um comentário e, portanto, ignorando. Portanto, o toque de comando foi passado sem qualquer operando de arquivo e, portanto, é o erro.

Para resolver esse erro, você pode pedir a Bash para não interpretar # como comentário.

$ touch ./#abc.txt ou $ touch '#abc.TXT' 

e verifique se o arquivo acabou de ser criado como:

$ ls -l Total 0 -rw-r-1 Avi Avi 0 8 de junho 12:14 #abc.TXT 

Agora crie um arquivo cujo nome contém # em qualquer lugar, exceto no implorando.

$ touch ./abc.txt $ touch ./abc#.txt ou $ touch 'a#bc.txt '$ touch' abc#.TXT' 

Correr 'ls -l'Para verificar:

$ ls -l Total 0 -RW-R-R-- 1 Avi Avi 0 8 de junho 12:16 abc.TXT -RW-R-R-- 1 Avi Avi 0 8 de junho 12:16 abc#.TXT 

O que acontece quando você cria dois arquivos (digamos a e #bc) de uma vez só:

$ toque a.txt #bc.TXT 

Verifique se o arquivo acabou de criar:

$ ls -l Total 0 -RW-R-R-- 1 Avi Avi 0 8 de junho 12:18 a.TXT 

Óbvio do exemplo acima, ele criou apenas o arquivo 'a'e arquivo'#bc'Foi ignorado. Para executar a situação acima com sucesso, podemos fazer,

$ toque a.TXT ./#bc.txt ou $ touch a.txt '#bc.TXT' 

e verifique como:

$ ls -l Total 0 -RW-R-R-- 1 Avi Avi 0 8 de junho 12:20 a.TXT -RW-R-R-- 1 Avi Avi 0 8 de junho 12:20 #bc.TXT 

Você pode mover o arquivo como:

$ mv ./#bc.TXT ./#cd.txt ou $ mv '#bc.txt "#cd.TXT' 

Copie -o como:

$ cp ./#cd.TXT ./#de.txt ou $ cp '#cd.txt "#de.TXT' 

Você pode editá -lo como usando sua escolha do editor como:

$ VI ./#cd.txt ou $ vi '#cd.TXT' 
$ nano ./#cd.txt ou $ nano '#cd.TXT' 

E exclui como:

$ rm ./#bc.txt ou $ rm '#bc.TXT' 

Para excluir todos os arquivos que têm hash (#) No nome do arquivo, você pode usar:

 # rm ./#* 

Lidar com arquivos com semicolon (;) em seu nome

Caso você não esteja ciente, o semicolon atua como um separador de comando em Bash e talvez outro shell também. O semicolon permite executar vários comando de uma só vez e atua como separador. Você já lidou com qualquer nome de arquivo com semicolon? Se não aqui, você vai.

Crie um arquivo com semi-colon.

$ touch; abc.TXT 
Saída de amostra
Touch: Operando de arquivo ausente Tente 'Touch -Help' para obter mais informações. Bash: ABC.txt: comando não encontrado 

O motivo do erro acima, que quando você executa o comando acima, interprete tocar como um comando, mas não conseguiu encontrar nenhum operando de arquivo antes do semicolon e, portanto, relata o erro. Ele também relata outro erro que 'abc.TXT'Comando não encontrado, apenas porque depois de Semicolon Bash estava esperando outro comando e'abc.TXT', não é um comando.

Para resolver esse erro, diga ao BASH para não interpretar o semicolon como separador de comando, como:

$ touch ./';abc.txt 'ou $ touch'; ABC.TXT' 

Observação: Nós incluímos o nome do arquivo com uma única cotação ". Diz a Bash isso ; faz parte do nome do arquivo e não do separador de comando.

Resto da ação (viz., copiar, mover, excluir) no arquivo e na pasta com semicolon em seu nome pode ser realizado diretamente para a frente, envolvendo o nome em uma única citação.

Lidar com outros caracteres especiais em nome de arquivo/pasta

Mais sinal (+) no nome do arquivo

Não requer nada extra, faça uma maneira normal, como simples nome de arquivo, como mostrado abaixo.

$ touch +12.TXT 

Sinal de dólar ($) no nome do arquivo

Você tem que incluir o nome do arquivo em uma única cotação, como fizemos no caso de semicolon. O resto das coisas está direto ..

$ touch '$ 12.TXT' 

Por cento (%) no nome do arquivo

Você não precisa fazer nada de diferente, trate -o como um arquivo normal.

$ touch %12.TXT 

Asterisk (*) no nome do arquivo

Ter asterisco no nome do arquivo não mude nada e você pode continuar usando -o como arquivo normal.

$ touch *12.TXT 

Observação: Quando você precisa excluir um arquivo que começa com *, Nunca use os seguintes comandos para excluir esses arquivos.

$ rm * ou $ rm -rf * 

Em vez disso, use,

$ rm ./*.TXT 

Ponto de exclamação (!) no nome do arquivo

Basta incluir o nome do arquivo em uma única citação e o restante das coisas são iguais.

$ touch '!12.TXT' 

No sinal (@) no nome do arquivo

Nada extra, trate um nome de arquivo com sinal como arquivo não rmal.

$ touch '@12.TXT' 

^ no nome do arquivo

Sem atenção extra necessária. Use um arquivo tendo ^ no nome do arquivo como arquivo normal.

$ touch ^12.TXT 

Ampersand (&) no nome do arquivo

O nome do arquivo deve ser fechado em citações únicas e você está pronto para ir.

$ touch '& 12.TXT' 

Parênteses () no nome do arquivo

Se o nome do arquivo tiver parênteses, você precisará incluir o nome do arquivo com citações únicas.

$ touch '(12.TXT)' 

Aparelho no nome do arquivo

Nenhum cuidado extra necessário. Basta tratá -lo como apenas mais um arquivo.

$ touch 12.TXT 

Chevrons no nome do arquivo

Um nome de arquivo com chevrons deve ser fechado em citações únicas.

$ touch '' 

Suportes quadrados [] no nome do arquivo

Trate o nome do arquivo com suportes quadrados como arquivos normais e você não precisa cuidar mais dele.

$ touch [12.TXT] 

Sob Score (_) no nome do arquivo

Eles são muito comuns e não exigem nada extra. Basta fazer o que você teria feito com um arquivo normal.

$ touch _12.TXT 

Igual a (=) no nome do arquivo

Tendo um sinal igual a não mudar nada, você pode usá-lo como um arquivo normal.

$ touch = 12.TXT 

Lidando com barra traseira (\)

O backslash diz a Shell para ignorar o próximo personagem. Você tem que incluir o nome do arquivo em uma única cotação, como fizemos no caso de semicolon. O resto das coisas está direto.

$ touch '.TXT' 

O caso especial de barra para a frente

Você não pode criar um arquivo cujo nome inclua uma barra para frente (/), Até que seu sistema de arquivos tenha bug. Não há como escapar de uma barra para frente.

Então, se você pode criar um arquivo como '/12.TXT' ou 'b/c.TXT' Em seguida, seu sistema de arquivos possui bug ou você tem suporte Unicode, o que permite criar um arquivo com slash forward. Nesse caso, a barra para frente não é uma barra real para a frente, mas um personagem unicode que parece uma barra para frente.

Ponto de interrogação (?) no nome do arquivo

Novamente, um exemplo em que você não precisa fazer nenhuma tentativa especial. Um nome de arquivo com ponto de interrogação pode ser tratado da maneira mais geral.

$ touch ?12.TXT 

Marca de ponto (.) no nome do arquivo

Os arquivos começando com ponto (.) são muito especiais no Linux e são chamados de arquivos DOT. São arquivos ocultos geralmente uma configuração ou arquivos do sistema. Você tem que usar o switch '-a' ou '-A' com comando ls Para visualizar esses arquivos.

Criar, editar, renomear e excluir esses arquivos são diretamente para a frente.

$ touch .12.TXT 

Observação: No Linux, você pode ter tantos pontos (.) Como você precisa em um nome de arquivo. Ao contrário de outros pontos do sistema no nome do arquivo, não significa separar o nome e a extensão. Você pode criar um arquivo com vários pontos como:

$ toque 1.2.3.4.5.6.7.8.9.10.TXT 

e verifique como:

$ ls -l Total 0 -rw-r-1 Avi Avi 0 8 de junho 14:32 1.2.3.4.5.6.7.8.9.10.TXT 

Vírgula (,) em nome do arquivo

Você pode ter vírgula em um nome de arquivo, quantos quiser e não precisa de nada extra. Apenas faça uma maneira normal, como nome simples do arquivo.

$ touch, 12.txt ou $ touch, 12,.TXT 

Cólon (:) no nome do arquivo

Você pode ter cólon em um nome de arquivo, quantos quiser e não precisa de nada extra. Apenas faça uma maneira normal, como nome simples do arquivo.

$ toque: 12.txt ou $ touch: 12:.TXT 

Tendo citações (solteiras e duplas) no nome do arquivo

Para ter cotações no nome do arquivo, temos que usar a regra de troca. EU.e, se você precisar ter uma única cotação no nome do arquivo, inclua o nome do arquivo com cotações duplas e se você precisar ter uma cotação dupla no nome do arquivo, inclua -o com uma única cotação.

$ touch "15 '.txt "e $ touch '15".TXT' 

Tilde (~) no nome do arquivo

Alguns editores no Linux gostam Emacs Crie um arquivo de backup do arquivo que está sendo editado. O arquivo de backup tem o nome do arquivo original mais um tilde no final do nome do arquivo. Você pode ter um arquivo com o nome que inclui Tilde, em qualquer local simplesmente como:

$ touch ~ 1a.txt ou $ touch 2b ~.TXT 

Espaço branco no nome do arquivo

Crie um arquivo cujo nome tem espaço entre personagem/palavra, diga “oi meu nome é Avishek.TXT”.

Não é uma boa ideia ter o nome do arquivo com espaços e, se você precisar distinto nome legível, você deve usar, sublinhado ou traço. No entanto, se você precisar criar esse arquivo, precisará usar barra para trás, o que ignora o próximo personagem. Para criar o arquivo acima, temos que fazê -lo dessa maneira ..

$ touch hi \ my \ name \ é \ Avishek.TXT oi meu nome é Avishek.TXT 

Eu tentei cobrir todo o cenário que você pode encontrar. A maior parte da implementação acima é explicitamente para a Bash Shell e pode não funcionar em outra concha.

Se você sentir que eu perdi algo (que é muito comum e humana natureza), você pode incluir sua sugestão nos comentários abaixo. Continue conectado, continue comentando. Fique atento e conectado! Curam e compartilhe -nos e ajude -nos a se espalhar!