Câu trả lời:
Chỉ cần sử dụng bash, không cần phải gọi các lệnh bên ngoài.
for file in *_h.png
do
mv "$file" "${file/_h.png/_half.png}"
done
Đừng thêm vào #!/bin/sh
Đối với những người cần một lót:
for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done
Do not add #!/bin/sh
? Tôi đã thử cả làm việc với / không có tuyên bố này.
#!/bin/bash
. Điều này nói rằng, bash thường là vỏ mặc định trong nhiều máy tính nên bạn sẽ không tìm thấy nhiều điểm khác biệt: D Bạn có thể tìm thêm thông tin ở đây
Hãy thử rename
lệnh:
rename 's/_h.png/_half.png/' *.png
Cập nhật:
sử dụng ví dụ:
tạo một số nội dung
$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch one_h.png two_h.png three_h.png
$ ls
one_h.png three_h.png two_h.png
giải pháp kiểm tra:
$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png three_half.png two_half.png
ls
gì? là những gì rename ...
bạn cố gắng?
rename
không phải là một công cụ Unix tiêu chuẩn.
brew install rename
's//'
- Tôi đã giới thiệu người đàn ông và có bản tóm tắt đơn giản : rename [options] expression replacement file...
, trên CentOS 7, phiên bản:rename from util-linux 2.23.2
.
phù hợp với BẤT K character ký tự nào, không chỉ là một dấu chấm - đối với dấu chấm theo nghĩa đen, \.
thay vào đó hãy sử dụng
for f in *.png; do
fnew=`echo $f | sed 's/_h.png/_half.png/'`
mv $f $fnew
done
mv $f $fnew
bằng echo $fnew
dòng thứ hai để đảm bảo đầu ra trông có vẻ lành mạnh.
Bạn đang tìm kiếm một giải pháp bash tinh khiết? Có nhiều cách tiếp cận, nhưng đây là một.
for file in *_h.png ; do mv "$file" "${file%%_h.png}_half.png" ; done
Điều này giả định rằng các tệp duy nhất trong thư mục hiện tại kết thúc _h.png
là những tệp bạn muốn đổi tên.
Cụ thể hơn nhiều
for file in 0{5..6}_h.png ; do mv "$file" "${file/_h./_half.}" ; done
Giả sử hai ví dụ này là duy nhất của bạn. các tập tin.
Đối với trường hợp chung, việc đổi tên tập tin đã được đề cập trước đó .
Sử dụng các rename
tiện ích được viết bằng perl. Có thể mặc định nó không có sẵn mặc dù ...
$ touch 0{5..6}_h.png
$ ls
05_h.png 06_h.png
$ rename 's/h/half/' *.png
$ ls
05_half.png 06_half.png
Tôi đã có một câu hỏi tương tự: Trong hướng dẫn, nó mô tả đổi tên thành
rename [option] expression replacement file
vì vậy bạn có thể sử dụng nó theo cách này
rename _h _half *.png
Trong mã: '_h' là biểu thức mà bạn đang tìm kiếm. '_Half' là mẫu mà bạn muốn thay thế. '* .png' là phạm vi tệp mà bạn đang tìm kiếm tệp mục tiêu có thể của mình.
Hy vọng điều này có thể giúp c:
Sử dụng rename
tiện ích:
rc@bvm3:/tmp/foo $ touch 05_h.png 06_h.png
rc@bvm3:/tmp/foo $ rename 's/_h/_half/' *
rc@bvm3:/tmp/foo $ ls -l
total 0
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 05_half.png
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 06_half.png
Mặc dù bộ câu trả lời đã hoàn tất, tôi cần thêm một câu hỏi còn thiếu.
for i in *_h.png;
do name=`echo "$i" | cut -d'_' -f1`
echo "Executing of name $name"
mv "$i" "${name}_half.png"
done