Trong trường hợp cụ thể của bạn, bạn có thể sử dụng bashlệnh sau ( bashlà trình bao mặc định trên macOS):
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
Lưu ý: Nếu có khả năng tên tệp của bạn bắt đầu bằng -, hãy đặt -- trước chúng [1]:
mv -- "$f" "${f/_*_/_}"
Lưu ý: echođược bổ sung trước mvđể thực hiện chạy khô. Xóa nó để thực hiện đổi tên thực tế.
Bạn có thể chạy nó từ dòng lệnh hoặc sử dụng nó trong một tập lệnh.
"${f/_*_/_}"là một ứng dụng của bash mở rộng tham số : mẫu so khớp chuỗi con (đầu tiên) _*_được thay thế bằng chữ _, cắt hiệu quả mã thông báo giữa khỏi tên.
- Lưu ý rằng đó
_*_là một mẫu (một biểu thức ký tự đại diện, cũng được sử dụng cho dấu chấm tròn), không phải là một biểu thức chính quy (để tìm hiểu về các mẫu, chạy man bashvà tìm kiếm Pattern Matching).
Nếu bạn thấy mình thường xuyên đổi tên hàng loạt tệp, hãy xem xét cài đặt một công cụ chuyên dụng như renametiện ích dựa trên Perl . Trên macOS, bạn có thể cài đặt nó bằng trình quản lý gói phổ biến Homebrew như sau:
brew install rename
Đây là lệnh tương đương với lệnh ở trên cùng bằng cách sử dụng rename:
rename -n -e 's/_.*_/_/' *.png
Một lần nữa, lệnh này thực hiện chạy khô; loại bỏ -nđể thực hiện đổi tên thực tế.
- Tương tự như
bashgiải pháp, s/.../.../thực hiện thay thế văn bản, nhưng - không giống như trong bash- các biểu thức chính quy được sử dụng.
[1] Mục đích của đối số đặc biệt --, được hỗ trợ bởi hầu hết các tiện ích, là để báo hiệu rằng các đối số tiếp theo phải được coi là toán hạng (giá trị), ngay cả khi chúng trông giống như các tùy chọn bắt đầu bằng -, như Jacob C. lưu ý.