Volevo eliminare tutte le estensioni .sh così ho fatto questo:
ls *.sh | xargs -I {} mv {} `basename {} .sh`
Tuttavia non funziona, si comporta come basenamerestituisce un nome file invariato.
Perché si sta comportando in quel modo?
Ad esempio, funziona:
ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`;
MODIFICA :
Soluzione: la virgoletta singola impedisce la `basename ...`valutazione da parte della shell prima dell'esecuzione del comando.
ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'
-iall'opzione, ma quelle "classiche" sono state deprecate. Ad esempio, per usare solo un'opzione / riga, la nuova pagina man POSIX consiglia-L1. Per chiamare il vecchio comportamento di-i, la pagina consiglia l'-I'{}'opzione.