Làm cách nào để đổi tên nhiều tệp bằng regex?


20

Tôi muốn đổi tên nhiều tệp trên Mac OS X (10.7.2) .. Tôi không có gói perl cho renamelệnh.

Các tệp của tôi có tên như "T452-102456-0.png" và tôi muốn xóa phần "-0". Tôi biết tôi có thể thực hiện hành động này bằng cách viết tập lệnh php-cli của riêng tôi, nhưng tôi muốn biết về một giải pháp dễ dàng và nhanh hơn.


Không có mâu thuẫn logic giữa các tập tin pdf có nhiều tập tin pdf và tập tin của tôi có các tên như "T452-102456-0.png" không?
manatwork

Ồ ... loại tập tin không thành vấn đề, nhưng đó là sự thật ^^. Tôi chỉnh sửa, cảm ơn bạn đã nhận xét của bạn =)
Raphaël

Câu trả lời:


21

Bash hoặc Ksh cùng với mvcó thể giải quyết nó:

for f in *.png; do mv -n "$f" "${f/-0}"; done

Trong trường hợp tên tệp có thể có Phần 0 0 sau dấu gạch ngang đầu tiên và Số -0 -0 luôn ở phía trước dấu chấm, bạn có thể muốn bao gồm dấu chấm đó trong biểu thức:

for f in *.png; do mv -n "$f" "${f/-0./.}"; done

Nhưng vì quy tắc đổi tên đó rất đơn giản, nếu bạn có renametừ gói linux-linux , điều đó cũng sẽ làm điều đó:

rename '-0.' '.' *.png

nó hoạt động hoàn hảo. Cảm ơn bạn rất nhiều =)
Raphaël

3

Phương pháp đơn giản: Chỉ các tệp trong thư mục hiện tại

Với zsh:

autoload zmv
zmv '(*)-0(.png)' '$1$2'

Với các vỏ khác:

for x in *-0.png; do mv -- "$x" "${x%-0.*}.png"; done


Phương pháp nâng cao: Tệp trong thư mục hiện tại và / hoặc thư mục con

Với zsh:

zmv '(**/)(*)-0(.png)' '$1$2$3'

Với ksh93:

set -o globstar
for x in **/*-0.png; do mv -- "$x" "${x%-0.*}.png"; done

Với bash ≥4, như trên, nhưng sử dụng shopt -s globstarthay vì setlệnh.

Với các vỏ khác:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +

một lý do tuyệt vời khác để cài đặt zsh :) .... zmv
danidee


0

Nếu bạn có mmvgói:

mmv '*-0.png' '#1.png'

Giống như (các phiên bản gần đây) rename, điều này sẽ được chăm sóc hợp lý để tránh ghi đè lên các tệp hiện có.

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.