Tôi muốn xóa tất cả các phần mở rộng .sh vì vậy đã làm điều này:
ls *.sh | xargs -I {} mv {} `basename {} .sh`
Tuy nhiên, nó không hoạt động, nó hoạt động như basenametrả về tên tệp không thay đổi.
Tại sao nó lại hành xử theo cách đó?
Ví dụ, điều này hoạt động:
ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`;
CHỈNH SỬA :
Giải pháp: trích dẫn đơn ngăn chặn `basename ...`đánh giá bằng shell trước khi lệnh được chạy.
ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'
-itùy chọn, nhưng các tùy chọn 'cổ điển' đó đã không được chấp nhận. Ví dụ: chỉ sử dụng một tùy chọn / dòng, trang man POSIX mới khuyến nghị-L1. Để gọi hành vi cũ của-i, trang khuyến nghị-I'{}'tùy chọn.