Bạn có thể sử dụng renamelệ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/newthay thế oldbằ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
renamelệ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 renamekhô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?