Como remover em lote extensões de arquivos no mac usando csh ou bash?

3

Eu adicionei incorretamente a extensão .dcm em todos os arquivos no meu Mac, o que resultou em falha no login no meu iCloud e no armazenamento dos meus chaveiros.

Estava tão desesperado para descobrir uma solução para restaurar as extensões de arquivo originais, mas só encontrei respostas para substituir .abc por .def extensions, o que não é o que desejo. Desejo remover toda a extensão .dcm redundante adicionada em todos os arquivos.

Existe uma maneira de excluir as extensões .dcm em todos os arquivos (recursivamente)?

Estas são as soluções para substituir as exceções de arquivo que encontrei:

for file in *.abc; do mv "$file" "${file%.abc}"; done
for old in *.abc; do mv $old basename $old .abc.ef; done

Eles não são recursivos ou Bash (3.2x) diz "substituição ruim" / "comando não encontrado".

    
por Yaqian Huang 21.08.2017 / 17:38

1 resposta

4

Isso deve ser feito:

find / -type f -name '*.dcm' -exec sh -c 'mv -- "$0" "${0%.dcm}"' {} \;

O comando:

  • Recurses de /
  • Localiza todos os arquivos com o nome *.dcm
  • Executa uma pequena chamada de subshell com um argumento, o nome do arquivo ( {} )
  • … que renomeia o arquivo ( $0 ) usando mv
  • excluir a correspondência mais curta ( % ) de .dcm usando manipulação de string

Coloque um echo na frente de mv para ver o que ele faria.

Se você quiser trabalhar sem o subshell, pode canalizar para while :

find / -type f -name '*.dcm' -print0 | while IFS= read -r -d '' filename; do
  mv -- "$filename" "${filename%.dcm}"
done
    
por 21.08.2017 / 17:48