Sempre coloque aspas duplas em torno das substituições de variáveis $foo e substituições de comandos $(foo) (a menos que você saiba por que precisa deixá-las de fora e por que não há problema em fazê-lo).
for i in *; do mv "$i" "$(echo "$i" | tr -d "'")"; done
Isso funcionará principalmente, com algumas restrições:
- Você receberá um mau comportamento ou erros se um nome de arquivo começar com
- , porque mv o interpretará como uma opção.
- Isso não afeta os arquivos cujo nome começa com
. .
- Com algumas configurações, isso gerará barras invertidas no comando
echo .
- As novas linhas no final do nome são perdidas.
No ksh93, bash e zsh, você pode escrever isso com menos problemas usando a construção ${VARIABLE//PATTERN/REPLACEMENT} . A adição de -- a mv cuida dos nomes de arquivos que começam com - . Se você tiver nomes de arquivos que comecem com . , adicione .* ou .[^.]* ..?* após * conforme necessário.
for i in *; do mv -- "$i" "${i//\'/}"; done
No zsh, você pode usar zmv :
zmv '(*)' "\${1//\'/}"
No Debian, Ubuntu e outros derivados, você pode usar o rename Script Perl.
rename "s/'//g" *