Có một lệnh Perlrename nên thực hiện các mẹo. Coi chừng: có một số lệnh khác nhau được gọi rename, vì vậy hãy chắc chắn rằng bạn đã có tập lệnh Perl mong muốn perlexprlà đối số của nó. Đây là renamelệnh được cung cấp bởi perlgói trên Debian và các công cụ phái sinh (Ubuntu, Mint, '), nhưng không phải trên các bản phân phối khác có thể có một tiện ích khác được gọi rename.
martin@martin ~/test % touch a.txt
martin@martin ~/test % touch b.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt
Như bạn có thể thấy, đó là idempotent - nó sẽ không thêm tiền tố nữa khi bạn gọi nó nhiều lần.
Nó hoạt động bằng cách thay thế bắt đầu (độ dài bằng không) của chuỗi ( ^) hoặc bắt đầu theo sau bởi một prefixchuỗi tùy chọn bằng prefix.
Tôi sẽ đóng gói cái này trong tập lệnh shell hoặc hàm shell như một bài tập cho bạn :)
Postfix khó hơn một chút, bởi vì bạn phải tìm ra phần nào của tên tệp tạo thành phần mở rộng ...