No zsh, isso é feito facilmente com a função zmv
. Coloque autoload -U zmv
no seu ~/.zshrc
, ou execute isso uma vez no seu shell, então:
zmv '* .pdf' '${f// /}'
Isso remove todos os espaços do nome do arquivo. Se você quiser remover apenas o anterior à extensão .pdf
:
zmv '* .pdf' '${f# .pdf}.pdf'
ou usando parênteses para delimitar grupos que podem ser usados como referências anteriores:
zmv '(*) .pdf' '$1.pdf'
Se você deseja também agir em subdiretórios:
zmv '**/* .pdf' '${f# .pdf}.pdf'
ou (observe que você precisa usar (**/)
, não (**)/
):
zmv '(**/)(*) .pdf' '$1$2.pdf'
No Linux, com ou sem zsh, se houver apenas um espaço espúrio nos nomes dos arquivos:
rename \ .pdf .pdf *\ .pdf
ou, se houver apenas um espaço nos nomes originais:
rename ' ' '' *\ .pdf
Se você quiser atuar em subdiretórios, em ksh93 ≥o + ou bash ≥4, você pode usar **
para corresponder arquivos em subdiretórios. No bash, você precisa executar shopt -s globstar
first (colocar essa linha no seu ~/.bashrc
) e set -o globstar
no ksh93.
rename \ .pdf .pdf **/*\ .pdf
Tenha em atenção que o bash segue os links simbólicos quando recorrer aos diretórios.
Sem o benefício de **
, você pode usar find
para reciclar.
find . -name '* .pdf' -exec rename ' .pdf' .pdf {} +
Sob o Debian e derivados (incluindo Ubuntu) e a maioria dos sistemas não-Linux que vêm com perl
, o comando rename
é diferente, o que leva uma expressão Perl como um argumento ao invés de uma string para substituir e seqüência de substituição. Use rename.ul
nos comandos acima (sob o Debian e derivados), ou com o Perl rename
:
rename 's/ \.pdf$/.pdf/' -- *\ .pdf # strip the space before the extension
rename 's/ //g' -- *\ .pdf # strip all spaces