Como remover espaços em branco iniciais de nomes de arquivos e pastas?

1

Como remover espaços em branco iniciais dos nomes de arquivos e pastas? (Estou executando o OS X 10.6 Snow Leopard.)

Conforme fornecido abaixo por @Lri, consegui remover os espaços em branco à direita usando:

#!/bin/bash

IFS=$'\n'
for d in {1..9}; do
    find ~/Desktop -name '* ' -depth $d | while read f; do
        mv "$f" "$(sed 's/ *$//' <<< "$f")"
    done
done

Agora estou tentando remover o espaço em branco inicial com isso:

#!/bin/bash

IFS=$'\n'
for d in {1..9}; do
    find ~/Desktop -name '* ' -depth $d | while read f; do
        mv "$f" "$(sed 's/^ *//;s/ *$//' <<< "$f")"
    done
done

mas não funciona.

O que estou fazendo de errado?

    
por timoto 27.03.2012 / 01:51

1 resposta

3

Eu vejo dois problemas: primeiro, você precisa do comando find para procurar nomes com espaços no início, em vez de no final ( -name ' *' em vez de -name '* ' ). Segundo, f será o caminho completo para o arquivo, não apenas seu nome; Isso significa que os espaços não estão no início da string, eles estão logo após a última barra (por exemplo, "/ Users / timoto / Desktop / spacedfile"). Isso é um pouco mais complicado de lidar; a maneira mais fácil que pensei foi dividir o caminho usando dirname e basename e remover os espaços iniciais apenas da parte base.

Além disso, não deve haver necessidade de executar o comando 9 vezes em diferentes profundidades; basta usar a opção -depth (sem um número) e ela retornará resultados em primeira ordem (ou seja, os arquivos mais profundos antes de seus diretórios), o que evitará que problemas com diretórios sejam renomeados de processar os arquivos neles .

IFS=$'\n'
find ~/Desktop -name ' *' -depth | while read f; do
    mv "$f" "$(dirname "$f")/$(basename "$f" | sed 's/^ *//;s/ *$//')"
done

EDIT: meu comando basename / sed foi muito mais complexo do que precisa ser; simplificou isso ...

    
por 27.03.2012 / 05:54