sexta-feira, 10 de março de 2017

bash remover a extensão do arquivo - %

Renomear vários arquivos removendo sua extensão. O comando abaixo vai dar pau se tiver nova linha no nome

find -type f -name '*.bbd' | while read f; do mv "$f" "${f%.bbd}"; done
O de baixo funciona melhor nos casos de newline

find -type f -name '*.txt' -print0 | while read -d $'\0' f; do mv "$f" "${f%.txt}"; done
Fonte: http://stackoverflow.com/questions/4509485/linux-remove-file-extensions-for-multiple-files


Quando o sinal de % for usado no padrão ${variavel%substring}, ele ira retornar o conteúdo da variavel deletando a substring.

-print0 separa o nome do arquivo com um 0 (NULL) para que possa ser interpretado de forma correta os nomes com espaços ou nova linha.

xargs lê espaços e novas linhas, mas separa as strings e executa algum comando para cada uma das strings. Se colocar xargs -0 ele vai funcionar igual ao print0 ~~ ??




Nenhum comentário: