Como eu removo retornos de carro dos nomes de diretórios?

5

Eu criei um arquivo no Excel e enviei o arquivo para a minha máquina Linux. No arquivo havia um monte de comandos mkdir . Agora, todos os diretórios recém-criados têm um retorno de carro no final deles. Eu posso encontrar os diretórios usando este comando:

find . -type d -name *$'\r'

mas quando eu tentar removê-los usando este comando:

find . -type d -name *$'\r' | xargs rm-rf

não funciona - nada é removido. Os diretórios ainda estão lá e eles ainda têm retornos de carro.

Você pode me ajudar a criar um comando que removerá os 'r' irritantes? Obrigado.

P.S. Estou usando o RHEL 5.3

    
por John C 09.01.2013 / 19:00

3 respostas

2

EDITED: esqueci de escapar duas vezes o \ r na linha sed

qualquer um deles deve funcionar para você

for i in $(find . -type d -name '*\r'); do mv "$i" "$(echo $i | sed -e 's/\r//g')"; done

find . -type d -name '*\r' -exec mv "{}" "$(echo {} | sed -e 's/\r//g')" \;

isto irá encontrar todos os diretórios chamados * $ \ r em seu diretório atual

ele irá então mv (renomear) para o mesmo nome menos o \ r

    
por 09.01.2013 / 19:16
4

O comando rename do Linux facilita isso:

rename $'\r' '' *

Isso substitui o primeiro e único retorno de carro ( $'\r' ) por uma string vazia ( '' ) em todos os nomes de arquivos no diretório atual. Os nomes que não contêm um retorno de carro não são alterados (ou você pode escrever rename $'\r' '' *$'\r' para considerar apenas os arquivos que devem ser renomeados).

Se você precisar também de arquivos em subdiretórios:

shopt -s globstar
rename $'\r' '' **/*$'\r'

(Usuários do Debian, Ubuntu e derivados: altere rename para rename.ul ou altere rename $'\r' '' para rename 's/\r//' .)

Alternativa, usando a função zmv do zsh:

zmv $'**/*\r' "${f%?}"
    
por 10.01.2013 / 00:29
0

experimente este find . -type d -name *$'\r' -exec rm -rf '{}' \;

    
por 09.01.2013 / 19:06