Có cách nào để nhanh chóng thay đổi tất cả các phần mở rộng tệp của tất cả các tệp trong một thư mục không?


14

Tôi có một thư mục lớn sách âm thanh .m4b mà ở định dạng hiện tại của chúng sẽ không phát trên điện thoại Android của tôi. Tuy nhiên, chúng hoạt động tốt nếu được đổi tên thành .m4a

Có một phương thức nhanh hoặc lệnh đầu cuối có thể đổi tên mọi tệp .m4b trong một thư mục thành .m4a không? Không cần bất kỳ chuyển đổi nào của các tệp, chỉ cần đổi tên phần mở rộng tệp hoạt động hoàn toàn tốt.


2
FYI: renamelà một kịch bản PERL và chấp nhận các biểu thức chính quy. Các hệ thống Debian cũng có một rename.ullệnh như là một phần của util-linux-ng package. Nếu perl không được cài đặt (ok, rất khó xảy ra;)) renamecũng không.
Rinzwind

Câu trả lời:


16

Điều này sẽ làm công việc cho bạn.

rename 's/.m4b$/.m4a/' *.m4b

Để chạy thử, bạn có thể sử dụng lệnh này:

rename 's/.m4b$/.m4a/' *.m4b -vn

-v có nghĩa là "dài dòng" và nó sẽ xuất tên của các tệp khi nó đổi tên chúng.

-n sẽ thực hiện chạy thử khi nó không đổi tên bất kỳ tệp nào, nhưng sẽ hiển thị cho bạn danh sách các tệp sẽ được đổi tên.


Câu trả lời tốt hơn nhiều so với của tôi. Tôi đã lười biếng và cố gắng không sử dụng các biểu thức thông thường ...
adempewolff

Cảm ơn bạn, làm việc một điều trị. Cảm ơn @adempewolff vì những nỗ lực này
bao gồm cả

10

Một cách rất nhanh để đổi tên các tệp, nếu đó là tất cả những gì bạn cần làm và không cần chuyển đổi chúng sang định dạng khác, là sử dụng các mở rộng tham số của Bash, được trình bày chi tiết rất độc đáo tại wiki Bash .

Có một số cách khác nhau để thay đổi tiện ích mở rộng, nhưng tôi sử dụng ở đây ${var/original/replacement}mô hình đơn giản :

for file in *.m4b; do mv -- "${file}" "${file/%m4b/m4a}"; done

Nếu bạn muốn xem những gì sẽ được thay đổi bởi lệnh, đặt echotrước mvvà những thay đổi sẽ được liệt kê.

Không cần phải nói oneliner này cũng có thể được sửa đổi cho các tệp khác và bạn cũng có thể sử dụng mở rộng tham số để xóa phần mở rộng tệp.


+1 Cách này hoạt động giống như câu trả lời của @Basharat Sial ngoại trừ cách này cũng sẽ hoạt động khi bạn có nhiều tệp khớp *.m4b. Nếu không bạn sẽ gặp lỗi argument list too long.
matt bị bỏng

Ngoài ra, để xem điều đó xảy ra, hãy thêm cờ verbose:for file in *.m4b; do mv -v -- "${file}" "${file/%m4b/m4a}"; done
matt đốt cháy
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.