2011-08-31 37 views
7

Tôi muốn đổi tên tất cả các tệp trong một thư mục và thêm phần mở rộng .xml. Tôi đang sử dụng Unix. Làm thế nào tôi có thể làm điều đó?Cách thêm phần mở rộng .xml vào tất cả các tệp trong một thư mục trong Unix/Linux

+1

Những thẻ này tạo ra sự nhầm lẫn. Bạn có muốn làm điều này trong PHP, Python hay Unix shell? – rds

+0

đổi tên 's/$/\. Xml /' * tham khảo: http://askubuntu.com/a/74368 – Neil

Trả lời

18

Trên vỏ, bạn có thể làm điều này:

for file in *; do 
    if [ -f ${file} ]; then 
     mv ${file} ${file}.xml 
    fi 
done 

Sửa

Để làm điều này một cách đệ quy trên tất cả các thư mục con, bạn nên sử dụng find:

for file in $(find -type f); do 
    mv ${file} ${file}.xml 
done 

Mặt khác Mặt khác, nếu bạn định làm gì phức tạp hơn, bạn có lẽ không nên sử dụng các tập lệnh shell.

Vẫn còn tốt hơn

Sử dụng các bình luận được cung cấp bởi Jonathan Leffler dưới đây:

find . -type f -exec mv {} {}.xml ';' 
+0

làm thế nào để tôi làm điều đó đệ quy trên tất cả các thư mục phụ quá – aWebDeveloper

+5

Sử dụng 'tìm' để tìm các tập tin; 'tìm. -type f -exec mv {} {} .xml ';' '. –

+1

Đã cập nhật câu trả lời. –

2

Trong Python:

Sử dụng os.listdir để tìm tên của tất cả các file trong một thư mục. Nếu bạn cần đệ quy tìm tất cả các tệp trong thư mục con, hãy sử dụng os.walk để thay thế. API của nó phức tạp hơn os.listdir nhưng nó cung cấp các cách mạnh mẽ để đệ quy thư mục đi bộ.

Sau đó, sử dụng os.rename để đổi tên tệp.

+0

một số mã mẫu hoặc ví dụ hoặc liên kết. Tôi không biết python – aWebDeveloper

+0

@Web Developer: bạn có chỉ cho tôi 1 câu trả lời không? Nghiêm túc? –

+0

không có tôi nhấp vào nó do nhầm lẫn tôi ngay lập tức hoàn tác nó – aWebDeveloper

3

Không biết nếu điều này là tiêu chuẩn, nhưng Perl gói của tôi (Debian/Ubuntu) bao gồm một /usr/bin/prename (và một liên kết tượng trưng chỉ rename) không có mục đích nào khác:

rename 's/$/.xml/' * 
+0

làm cách nào để tôi thực hiện đệ quy trên tất cả các thư mục con quá nhưng không thực hiện trên các tệp .xml. tức là các tệp chưa được đổi tên thành – aWebDeveloper

+0

Với '$ (find-type f)' thay vì '*'. Và điều chỉnh regex bằng một xác nhận 's/(? mario

+2

Bạn có thể sử dụng đổi tên bằng cờ -n để kiểm tra cách đổi tên sẽ không thực sự đổi tên các tệp. –

3
find . -type f \! -name '*.xml' -print0 | xargs -0 rename 's/$/.xml/' 
Các vấn đề liên quan