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 .tif
phần cuối của mỗi tệp. Làm thế nào tôi có thể sử dụng rename
lệnh để làm điều này?
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 .tif
phần cuối của mỗi tệp. Làm thế nào tôi có thể sử dụng rename
lệnh để làm điều này?
Câu trả lời:
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 ( rename
gói trên Debian):
rename 's/\.tif$//' *.tif
util-linux
rename
(như thường thấy trên Red Hat, rename.ul
trên Debian):
rename -- .tif '' *.tif
(lưu ý rằng người ta sẽ đổi tên blah.tiffany.tif
thành blahfany.tif
)
Đố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)
for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done
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.tmp
phầ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.
rename
không tương thích với (và hạn chế hơn nhiều so với) rename
lệnh truyền thống từ đó perl
.
.oldext
trong tên tệp, không nhất thiết phải là phần mở rộng ( foo.oldextasy.oldext
sẽ được đổi tên thành footasy.oldext
).
chúng ta có thể làm cho đệ quy này
for i in *.gz; do mv -i $i `basename $i .gz`; done