Quería eliminar todas las extensiones .sh, así que hice esto:
ls *.sh | xargs -I {} mv {} `basename {} .sh`
Sin embargo, no funciona, se comporta como basename
devuelve el nombre del archivo sin cambios.
¿Por qué se comporta así?
Por ejemplo, esto funciona:
ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`;
EDITAR :
Solución: la comilla simple impide la `basename ...`
evaluación por parte del shell antes de ejecutar el comando.
ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'
-i
opción, pero esas opciones 'clásicas' han quedado en desuso. Por ejemplo, para usar solo una opción / línea, se recomienda la nueva página de manual POSIX-L1
. Para llamar al comportamiento anterior de-i
, la página recomienda la-I'{}'
opción.