Я хотел удалить все расширения .sh, поэтому сделал это:
ls *.sh | xargs -I {} mv {} `basename {} .sh`
Однако это не работает, оно ведет себя как basenameвозвращает неизменное имя файла.
Почему так себя ведет?
Например, это работает:
ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`;
РЕДАКТИРОВАТЬ :
Решение: одинарная кавычка предотвращает `basename ...`оценку оболочкой до запуска команды.
ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'
-iопции, но эти «классические» опции устарели. Например, чтобы использовать только одну опцию / строку, рекомендуется новая справочная страница POSIX-L1. Чтобы вызвать старое поведение-i, страница рекомендует эту-I'{}'опцию.