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