Làm cách nào để đổi tên nhiều tệp bằng cách xóa phần mở rộng?


13

Tôi có một số tệp tiff có tên:

sw.001.tif
sw.002.tif
...

và tôi muốn xóa .tifphần cuối của mỗi tệp. Làm thế nào tôi có thể sử dụng renamelệnh để làm điều này?


2
Hãy nhớ rằng KHÔNG có hệ thống tập tin linux hoặc unix sử dụng "phần mở rộng" kiểu Windows hoặc VMS - chỉ theo quy ước rằng một hậu tố của tên tệp là ".tif" hoặc ".c" hoặc ".o" hoặc ".so " hay bất cứ cái gì.
Bruce Ediger

Điều đó tốt ... Tôi đang nhập tệp từ windows sang linux :)
Paul

1
Về mặt kỹ thuật, Windows cũng không sử dụng các phần mở rộng tệp, chỉ là trình quản lý tệp của Windows 95 tiếp tục sử dụng các ký tự cuối cùng của tên tệp để xác định loại tệp sau khi thoát khỏi sơ đồ đặt tên MS-DOS và quy ước vẫn còn.
RAKK

Câu trả lời:


23

perl's rename(như thường thấy trên Debian nơi nó cũng được gọi là prename), hoặc phái sinh này ( renamegói trên Debian):

rename 's/\.tif$//' *.tif

util-linux rename(như thường thấy trên Red Hat, rename.ultrên Debian):

rename -- .tif '' *.tif

(lưu ý rằng người ta sẽ đổi tên blah.tiffany.tifthành blahfany.tif)


2
Tôi tin rằng việc đổi tên "Debian" là của Larry Wall (đi kèm với Perl?) Và "Red Hat" là từ tiện ích linux (rename.ul trong Debian IIRC).
Xt

@XTL: Đúng. Tôi chỉ gọi họ như vậy bởi vì chúng là các chương trình "đổi tên" được tìm thấy trong các dẫn xuất Debian hoặc Red Hat.
Ignacio Vazquez-Abrams

Cám ơn rất nhiều! Tôi chưa bao giờ nhận ra rằng có những phiên bản khác nhau của 'đổi tên'. Tôi giả sử có sự khác biệt tinh tế khác giữa các lệnh trong debian & redhat. Tôi sẽ phải tìm kiếm một số khác biệt của họ.
Paul

6

Đối với một người không đổi tên, bạn có thể làm:

$ for i in *.tif; do mv -i $i `basename $i .tif`; done

(-i để cảnh báo chống lại việc thay thế một tập tin)


15
Phiên bản nhanh hơn an toàn hơn:for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done
jw013 20/03/2016

+1 về bình luận cuối cùng ở đây. Nó an toàn hơn trên tên tập tin với không gian trống.
petobens

1
@ jw013 bình luận của bạn nên là một câu trả lời cấp cao nhất.
Roland

1
rename -- .oldext .newext *.oldext

Điều này thay thế phần mở rộng cũ bằng cái mới. Để chỉ cần loại bỏ phần mở rộng, bạn có thể chuyển một cách rõ ràng trong một chuỗi trống làm đối số.

rename -- .gz.tmp  '' *.gz.tmp

Với lệnh trên, tất cả các tệp có .gz.tmpphần mở rộng trong thư mục hiện tại sẽ được đổi tên thành filename.gz.

Tham khảo bài viết: Linux: xóa phần mở rộng tệp cho nhiều tệp để biết chi tiết.


1
Điều đó giả định rằng việc triển khai linux-linux renamekhông tương thích với (và hạn chế hơn nhiều so với) renamelệnh truyền thống từ đó perl.
Stéphane Chazelas

Cũng lưu ý rằng nó thay thế lần xuất hiện đầu tiên.oldext trong tên tệp, không nhất thiết phải là phần mở rộng ( foo.oldextasy.oldextsẽ được đổi tên thành footasy.oldext).
Stéphane Chazelas

1

Nếu bạn sử dụng IBM AIX, bạn sẽ không có renamelệnh, vì vậy để xóa hàng loạt các phần mở rộng tệp, bạn sẽ phải sử dụng các lệnh System V UNIX đơn giản:

for file in *.tif; do
   mv $file `echo $file | sed 's/.tif$//'`;
done;

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.