Cung cấp cho tất cả các tệp một phần mở rộng .jpg


8

Tôi có một thư mục và một số phần mở rộng của tệp được viết hoa (.JPG) thay vì chữ thường.

Tôi muốn đảm bảo mọi tệp đều có .jpg là phần mở rộng của nó. Làm thế nào tôi có thể làm điều này từ một dấu nhắc shell?


Thật đáng tiếc khi linux không có AppleScript.
gadmo

2
Thật tuyệt vời khi Linux không có AppleScript.
toán

Câu trả lời:


15

Sử dụng mở rộng tham số Shell :

for f in *.JPG; do
    mv "${f}" "${f%%.JPG}.jpg"
done

Các "nhân vật sẽ chăm sóc tên tập tin có chứa không gian, như các bức ảnh thường làm.


5
+1 Giải pháp này hoạt động ngay cả khi bạn có khoảng trắng trong tên tệp, nhưng bạn có nghĩa là "$ f" thay vì "f".
Adam Zalcman

Shell Parameter Expansion là một chút khó hiểu, người ta có thể sử dụng tên cơ sở thay thế: cho f trong * .JPG; làm mv "$ f" "` tên cơ sở $ f .JPG`.jpg "; xong
toán

@math: Tôi thích phiên bản của mình vì nó hoạt động với tên tệp chứa khoảng trắng và cũng sẽ hoạt động với /path/to/*.JPG. Bạn được chào đón để gửi câu trả lời của riêng bạn, tất nhiên :)
Johnsyweb

Tất nhiên tên cơ sở sẽ dải các thư mục hàng đầu nhưng sẽ hoạt động với khoảng trắng bên trong tên tệp. (Tôi không nghĩ rằng đây là giá trị của một câu trả lời;) vì vậy tôi đăng nó như một bình luận)
toán

10

Nếu bạn có thể sử dụng các công cụ bên ngoài (không chỉ bash), hãy kiểm tra renamelệnh!

rename .JPG .jpg *

Đây renamelà một phần của util-linux.


đổi tên là ... có vấn đề. Có một phiên bản đổi tên đi kèm với perlviệc chấp nhận các đối số khác nhau để làm điều tương tự.
cha0site

Bạn có thể giải thích thêm một chút? Phiên bản nào BTW?
toán

3

Nếu bạn có khoảng trắng trong tên tệp:

for f in *.JPG; do [[ -f "${f}" ]] && mv "${f}" "${f/%JPG/jpg}"; done

2

Tôi sẽ đề nghị có một cái nhìn vào mmvlệnh. Nó phù hợp chính xác cho loại nhiệm vụ này. Trong kịch bản của bạn, nó sẽ là:

#> mmv "*.JPG" "#1.jpg"

Các trang người đàn ông có đầy đủ các ví dụ, vì vậy nó cần có thời gian để làm quen với nó.

Trên các hệ thống Debian, nó có thể được cài đặt với:

#> aptitude install mmv

0

nếu bạn không có khoảng trắng trong tên tệp:

for f in *.JPG; do mv $f `echo $f | sed 's/JPG$/jpg/'`; done

1
Thật dễ dàng để làm cho công việc này hoạt động đối với các tệp có khoảng trắng trong tên: chỉ cần thêm dấu ngoặc kép xung quanh cả hai đối số mv.
Adam Zalcman

Tôi không có không gian. Tôi phải thêm gì để thực hiện điều này trong thư mục HIỆN TẠI. Hiện tại tôi gặp lỗi - mv: could stat `* .JPG ': Không có tệp hoặc thư mục như vậy
Mark Flint

1
bạn không có bất kỳ JPG nào ở đó.
Karoly Horvath
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.