Volevo eliminare tutte le estensioni .sh così ho fatto questo:
ls *.sh | xargs -I {} mv {} `basename {} .sh`
Tuttavia non funziona, si comporta come basename
restituisce 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`'
-i
all'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.