Bạn có thể sử dụng rename
lệnh như thế này:
$ rename -n 's/MOD11A1\.A2010(...)\..*/modis$1.hdf/' MOD*.hdf
rename(MOD11A1.A2010001.h24v06.006.2016025150444.hdf, modis001.hdf)
rename(MOD11A1.A2010002.h24v06.006.2016025151748.hdf, modis002.hdf)
rename(MOD11A1.A2010003.h24v06.006.2016025163706.hdf, modis003.hdf)
Sau khi thử nghiệm, loại bỏ -n
để thực sự đổi tên tập tin.
Ghi chú
s/old/new
thay thế old
bằngnew
\.
nghĩa đen .
...
ba nhân vật có thể là bất cứ điều gì
(some chars)
lưu lại some chars
để tham khảo sau với$1
- Chúng ta có thể sử dụng một biểu thức chính đơn giản để khớp với phần đầu tiên của tên tệp trong
rename
lệnh, như câu trả lời của muru. Đôi khi bạn muốn sử dụng một biểu thức rõ ràng hơn để phân biệt giữa các tệp mà bạn làm hoặc không muốn hành động hoặc để chắc chắn rằng regex của bạn sẽ không hút quá nhiều ký tự. Thường có rất nhiều sự linh hoạt trong việc giải quyết loại vấn đề này.
Lưu ý rằng điều này không cung cấp cho bạn chính xác những gì bạn yêu cầu; nó duy trì chiều rộng cố định của các con số. Tôi đã làm điều này bởi vì đó là một ý tưởng tốt để sử dụng các số có chiều rộng cố định trong tên tệp (nếu không chúng sẽ được sắp xếp theo cách khó hiểu, ví dụ như 10 trước 2) (vàbởi vì tôi chưa tìm ra cách sử dụng rename
để tạo ra tên bạn thực sự yêu cầu ... nếu tôi làm, tôi sẽ cập nhật câu trả lời của mình câu trả lời của muru làm điều đó ...).
Lưu ý rằng Perl rename
không được bao gồm trong cài đặt 17.10 mặc định , vì vậy nếu bạn đang chạy 17.10 (hoặc cho các độc giả tương lai, có lẽ là phiên bản mới hơn), hãy bắt đầu bằng cách chạy
sudo apt install rename
.A2010001.
một phần của tên tệp gốc? Có khả năng bất kỳ chuỗi số nào trong số này sẽ có giá trị trùng lặp không?