os x remove barra do nome do arquivo

0

Oi eu quero remover todas as barras de todos os meus arquivos, mas fazer isso de forma recursiva para cada diretório em um diretório principal.

Como eu tenho que modificar esse script, que funciona de forma não recursiva?

for f in "$1"/*; do
dir="$(dirname "$f")"
file="$(basename "$f")"
mv -- "$f" "${dir}/${file//[^_-0-9A-Za-z.]}"
done

ou melhor Eu quero apenas substituir uma barra nos nomes dos arquivos, mas isso para cada subpasta na pasta principal?

saudação Max

    
por MadMax 20.06.2017 / 10:38

1 resposta

0

Na camada BSD, uma barra é o separador de caminho. Quando você encontra um nome de arquivo com uma barra invertida, o kernel traduz a barra% -/ para dois pontos - : . Assim, um nome de arquivo no aplicativo localizador pode parecer com foo/bar , mas na camada BSD parece foo:bar .

Portanto, para percorrer a árvore de diretórios, use find para localizar arquivos com : em seus nomes. Em seguida, use um script in-line com -execdir para remover os dois-pontos (barras no aplicativo localizador) dos nomes de arquivos.

find . -type f -name '*:*' -execdir bash -c ' for file
    do
        echo mv -- "${file}" "${file//:}"
    done' sh {} \;

Isso listará apenas o comando mv e os operandos. Se você achar que a saída vai lhe dar os resultados desejados, remova o echo .

    
por 20.06.2017 / 17:47

Tags