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?
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?
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 ( 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)
Đố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.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.
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.
.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).
chúng ta có thể làm cho đệ quy này
for i in *.gz; do mv -i $i `basename $i .gz`; done