Eu queria excluir todas as extensões .sh, o que fiz:
ls *.sh | xargs -I {} mv {} `basename {} .sh`
No entanto, ele não funciona, ele se comporta como basename
retorna o nome do arquivo inalterado.
Por que está se comportando dessa maneira?
Por exemplo, isso funciona:
ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`;
EDIT :
Solução: aspas simples impedem a `basename ...`
avaliação pelo shell antes da execução do comando.
ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'
-i
opção, mas essas opções 'clássicas' foram preteridas. Por exemplo, para usar apenas uma opção / linha, a nova página do manual POSIX recomenda-L1
. Para chamar o comportamento antigo de-i
, a página recomenda a-I'{}'
opção.