os x remove a barra do nome do arquivo

os x remove a barra do nome do arquivo

Olá, quero remover todas as barras de todos os meus arquivos, mas faça isso recursivamente para cada diretório em um diretório principal.

Como devo 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, quero substituir apenas uma barra nos nomes de arquivos, mas isso para cada subpasta na pasta principal?

saudação Max

Responder1

Na camada BSD, uma barra é o separador de caminho. Quando você encontra um nome de arquivo com uma barra, o kernel converte a barra- /em dois pontos- :. Portanto, um nome de arquivo no aplicativo localizador pode parecer, foo/barmas na camada BSD parece foo:bar.

Portanto, para percorrer a árvore de diretórios, use findpara localizar os arquivos :em seus nomes. Em seguida, use um script embutido para -execdirremover os dois pontos (barras no aplicativo localizador) dos nomes dos arquivos.

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

Isso listará apenas o mvcomando e os operandos. Se você acha que a saída fornecerá os resultados desejados, remova o arquivo echo.

informação relacionada