Я хотел удалить все расширения .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'{}'
опцию.