Dưới đây là một giải pháp tổng quát hơn, nhưng vẫn dễ dàng cho vấn đề này:
for oldName in `find . -name "*.*.*"`; do newName=`echo $oldName | rev | cut -f2- -d'.' | rev`; mv $oldName $newName; done
lời giải thích ngắn gọn:
find . -name "*.*.*
- điều này sẽ chỉ tìm các tệp có phần mở rộng trùng lặp đệ quy
echo $oldName | rev | cut -f2- -d'.' | rev
- mẹo xảy ra ở đây: lệnh rev thực hiện đảo ngược chuỗi, vì vậy bây giờ bạn có thể thấy, rằng bạn muốn toàn bộ tên tệp từ dấu chấm đầu tiên. (Gpj.gpj.fdsa)
mv $oldName $newName
- để thực sự đổi tên các tập tin
Ghi chú Phát hành: vì nó là một trong những dòng kịch bản đơn giản, bạn có thể tìm unhandled trường hợp. Tệp có dấu chấm phụ trong tên tệp, cấu trúc thư mục siêu sâu, v.v.
Nguồn
2012-11-24 09:38:26
đó chính xác là những gì tôi cần cảm ơn. Tôi sẽ giả định là% \ làm thay đổi? –
Nếu 'mv' của bạn có tùy chọn' -n' (không có tùy chọn clobber), bạn có thể sử dụng nó, chỉ để an toàn trong trường hợp tệp đích đã tồn tại. –