2012-11-23 33 views
9

Tôi quen thuộc với việc đổi tên nhưng tôi tò mò không đổi tên vẫn áp dụng để xóa các tiện ích mở rộng trùng lặp ??xóa các tiện ích mở rộng đôi trong bash

Nói rằng tôi có một vài tập tin có tên:

  • picture2.jpg.jpg
  • picture9.jpg.jpg
  • picture3.jpg.jpg
  • picture6.jpg.jpg

Bạn sẽ xóa tiện ích trùng lặp như thế nào ??

End kết quả:

  • picture2.jpg
  • picture9.jpg
  • picture3.jpg
  • picture6.jpg

Trả lời

13

Giả sử:

  • Bạn onl y muốn thực hiện điều này trong thư mục làm việc hiện tại
  • Các phần mở rộng đôi có định dạng (-đệ quy phi) chính xác như .jpg.jpg:

Sau đó kịch bản sau đây sẽ làm việc:

#!/bin/bash 

for file in *.jpg.jpg 
do 
    mv "${file}" "${file%.jpg}" 
done 

Giải thích:

Để sử dụng kịch bản này:

  • Tạo một file mới có tên gọi clean_de.sh trong thư mục đó
  • Set nó để thực thi bởi chmod +x clean_de.sh
  • Sau đó chạy nó bằng cách ./clean_de.sh

Một chú của Cảnh báo:

Như @gniourf_gniourf đã chỉ ra, sử dụng tùy chọn -n nếu mv bạn hỗ trợ nó.

Nếu không - nếu bạn có a.jpga.jpg.jpg trong cùng thư mục, nó sẽ đổi tên a.jpg.jpg-a.jpg và trong quá trình ghi đè lên a.jpg đã tồn tại mà không báo trước.

+0

đó 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? –

+0

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. –

4

Một dòng lệnh đổi tên cũng nên đủ (đối với trường hợp của bạn ít nhất):

rename 's/\.jpg\.jpg$/.jpg/' *.jpg.jpg 
1

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.

Các vấn đề liên quan