Je voulais supprimer toutes les extensions .sh, j'ai fait ceci:
ls *.sh | xargs -I {} mv {} `basename {} .sh`
Cependant, cela ne fonctionne pas, il se comporte comme basename
un nom de fichier sans changement.
Pourquoi se comporte-t-il ainsi?
Par exemple, cela fonctionne:
ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`;
MODIFIER :
Solution: un guillemet simple empêche l' `basename ...`
évaluation par le shell avant l'exécution de la commande.
ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'
-i
option, mais ces options «classiques» ont été dépréciées. Par exemple, pour utiliser une seule option / ligne, la nouvelle page de manuel POSIX recommande-L1
. Pour appeler l'ancien comportement de-i
, la page recommande l'-I'{}'
option.