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" *