Remover Espaço (s) Principal ou Trailing (s) em Nomes de Arquivos ou Pastas

3

Eu trabalhei de uma maneira simples e livre de arquivos duplicados. Você sabe, aqueles que contêm "(1).", "(2).", "(3).", Etc. em seus nomes). Em uma janela de terminal, na linha de comando, você digita "rm " [barra invertida] "). ", mas sem as aspas. Isso vai fazer isso. O [barra invertida] "\" significa que o próximo caractere é aceito apenas como um caractere, não como parte de um par de parênteses. Isso funciona quando nada mais vai. Incidentalmente, eu tentei digitar o "\" no comando "rm", mas ele não foi exibido corretamente, então coloquei o termo [barra invertida] lá.

A aparência de "\" em uma pasta ou em um nome de arquivo também mostra a presença de um espaço. O uso de espaços em nomes não é tão comum, a menos que você trabalhe com o Windows. Windows só tem você entre colchetes o "caminho inteiro \ nome do arquivo" entre aspas duplas. Você pode fazer isso no Ubuntu também, ou simplesmente colocar uma barra invertida "\" na frente do espaço. Mas e se você quiser substituir o espaço por um caractere diferente? Como um hífen ou sublinhado? Como você faria isso para todas as pastas e arquivos de uma só vez?

Ou se você decidir apenas remover os espaços, apenas junte o restante dos caracteres? Como você faria isso?

E aqui é um toughy: Basta se livrar ou qualquer espaço à esquerda ou à direita. mesmo que haja mais de um presente.

E para finalizar, como detectar e excluir arquivos completamente vazios. Ou pastas vazias.

    
por oldefoxx 01.09.2015 / 14:36

3 respostas

10

  • Para remover qualquer número de espaços iniciais dos nomes de arquivos, você pode usar rename ( prename ):

    rename -n 's/^ *//' *
    
  • Para remover qualquer número de espaços à direita dos nomes de arquivo, use rename ( prename ):

    rename -n 's/ *$//' *
    

    Remova -n (dry-run) se você estiver satisfeito com os nomes dos arquivos.

  • Para remover arquivos ou pastas que estão vazias (recursivamente):

    find . -empty
    

    Satisfeito? Deixe a ação acontecer:

    find . -empty -delete
    

    Apenas no diretório atual:

    find . -maxdepth 1 -empty -delete
    

    Use também -type f apenas para arquivos e -type d para apenas diretórios, se desejar.

Leia man rename e man find para ter mais ideia.

    
por heemayl 01.09.2015 / 14:53
3

Muitas vezes esqueço de rename . Veja como fazer isso com o bash:

$ touch "     leading spaces" "trailing spaces     "

$ printf ">%s<\n" *spaces*
>     leading spaces<
>trailing spaces     <

$ for f in *spaces*; do 
    new=${f##*([[:blank:]])}        # remove leading whitespace
    new=${new%%*([[:blank:]])}      # remove trailing whitespace
    mv "$f" "$new"
done

$ printf ">%s<\n" *spaces*
>leading spaces<
>trailing spaces<
    
por glenn jackman 01.09.2015 / 15:41
0

Para remover espaços, várias abordagens aqui: link link

Este é fácil: "Primeiro, insira o diretório com o cd: cd / meu / diretório e então corra: para f em *; do mv "$ f" echo $f | tr ' ' '_' ; feito "

Ainda mais simples: "renomear" s / // g "*"

Para se livrar de espaços, sublinhados e hífens: "renomear -i" s / [-_] // g "*"

Para se livrar de arquivos com zero bytes: link

Para manipular arquivos ou pastas vazios, encontrei este: "Apague arquivos vazios (remova 'echo' do comando): Código: encontrar . -empty -type f -print0 | xargs -0 echo rm Exclua diretórios vazios (remova 'echo' do comando): Código: encontrar . -empty -tipo d -print0 | xargs -0 echo rmdir " link

Parece estranho que eu tenha respondido a minha própria pergunta no espaço de meia hora, mas esse é o poder de um mecanismo de busca se você escolher as palavras certas para pesquisar. No entanto, há termos e condições solicitados que não produzem respostas prontas, como em outra pergunta que eu havia postado aqui no outro dia. Eu pesquisei duro primeiro, não encontrei resultados, então postei no AskUbuntu. Eu verifiquei e ainda não tenho resposta. Pode ter que voltar a fazer buscas, se eu puder pensar no que mais pedir.

    
por oldefoxx 01.09.2015 / 15:32