Trong trường hợp cụ thể của bạn, bạn có thể sử dụng bash
lệnh sau ( bash
là 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 bash
và 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ư rename
tiệ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ư
bash
giả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 ý.