Đổi tên tập tin trong thư mục


10

Làm thế nào tôi có thể loại bỏ một số văn bản từ tên tệp trong một thư mục?

Tôi hiện đang cố gắng:

rename s/"NEWER_(.*?)"//g *

Nhưng không có gì nó được đổi tên

Tôi có một thư mục mẹ, với một loạt các thư mục con, bên trong là các tệp, mà OneDrive nghĩ rằng sẽ là một ý tưởng tuyệt vời để nối thêm "(NEWER_timestamp)" và tôi muốn xóa nó.

Tên tệp ví dụ:

getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)

2
Bạn có thể gửi một tên tập tin ví dụ?
muru

chắc chắn rồi. cập nhật câu hỏi với một số
Kevin

Câu trả lời:


8

Hãy thử như sau:

find /path/to/parrent-dir -type f -exec rename -n 's:[^/]*(.*) .*$:$1:' {} +

./o7th.ico (NEWER_1417529135.81)                                 renamed as /o7th.ico
./sub-dir (NEWER_1417529135.81)/getyou.ico (NEWER_1417529079.87) renamed as /sub-dir (NEWER_1417529135.81)/getyou.ico
./sub-dir (NEWER_1417529135.81)/o7pm.ico (NEWER_1417529184.89)   renamed as /sub-dir (NEWER_1417529135.81)/o7pm.ico
./getyou.ico (NEWER_1417529079.87)                               renamed as /getyou.ico
./o7pm.ico (NEWER_1417529184.89)                                 renamed as /o7pm.ico
  • Tất cả [^/]*(.*) .*$chỉ khớp với phần cuối của đường dẫn không chứa a /. Và
  • Trong regex ở trên, (.*)là một nhóm khớp mọi thứ sau cùng /và trước một khoảng trắng . Tài liệu tham khảo trở lại của nó sẽ được $1.
  • .*$khớp tất cả mọi thứ để kết thúc $tên tập tin sau không gian.
  • Cuối cùng, trong phần thay thế của việc đổi tên s/.../REPLACEMENT/, chúng tôi chỉ giữ nhóm phù hợp nằm giữa cuối cùng \và một không gian (.*)được gọi là nhóm khớp.

2

Bạn nên xem xét sử dụng các trích dẫn bên ngoài regex (bên trong, chúng được lấy theo nghĩa đen là dấu ngoặc kép) và thoát (. Thử;

rename -n 's/ \(NEWER_\d{10}.\d{2}\)$//' *NEWER*

Độ chính xác của biểu thức có thể không cần thiết, nhưng bạn không thể quá thận trọng khi sửa đổi tệp.


tất cả những gì đang làm là treo với reading filenames from STDINtôi đã ở trong thư mục Parent có tất cả các tệp này
Kevin

@Kevin "Nếu không có tên tệp nào được đưa ra trên dòng lệnh, tên tệp sẽ được đọc thông qua đầu vào tiêu chuẩn." Và vì vỏ rời đi *NEWER*nếu không tìm thấy mở rộng, bạn chắc chắn đã mắc lỗi hoặc đang sử dụng một vỏ thay thế một ký tự đại diện chưa từng có.
muru

sao chép và dán, vào vỏ Ubuntu 14.10
Kevin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.