Trong trường hợp cụ thể của bạn, bạn có thể sử dụng lệnh sau đây bash
(bash
là vỏ mặc định trên hệ điều hành MacOS):
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
Lưu ý: echo
được thêm vào phía trước mv
để thực hiện một 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 tập lệnh.
"${f/_*_/_}"
là một ứng dụng của bash
parameter expansion: (đầu tiên) phù hợp với chuỗi mẫu _*_
được thay thế bằng nghĩa đen _
, cắt hiệu quả token giữa từ tên.
- Lưu ý rằng
_*_
là một mô hình (một biểu thức ký tự đại diện, cũng như sử dụng cho globbing), không phải là một biểu thức chính quy (để tìm hiểu về mô hình, chạy man bash
và tìm kiếm Pattern Matching
).
Nếu bạn thấy mình tập tin batch-đổi tên thường xuyên, hãy xem xét một công cụ chuyên dùng như Perl dựa trên rename
utility. Ngày OSX bạn có thể cài đặt nó sử dụng phổ biến quản lý gói Homebrew như sau: brew install rename
Dưới đây là các lệnh tương đương sử dụng rename
:
rename -n -e 's/_.*_/_/' *.png
Một lần nữa, lệnh này thực hiện một chạy khô; xóa -n
để thực hiện đổi tên thực tế.
- Tương tự như các giải pháp
bash
, s/.../.../
thực hiện thay văn bản, nhưng - không giống như trong bash
- đúng biểu thức thông thường được sử dụng.
nhìn vào NSString và NSMutableString của phương pháp phạm vi và chuỗi –
bạn đã xem xét các giải pháp phi terminal này? Một quy trình làm việc của Automator có thể thực hiện các thao tác này một cách dễ dàng. Bạn có thể tạo quy trình làm việc của trình tự động để đổi tên tất cả các tệp và thay thế văn bản bằng '_ * _' bằng dấu trống. – Encryptic
tôi nghĩ rằng automator không thể làm ký tự đại diện – kidnim