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ư basename
trả 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`'
-i
tù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.