Nếu tôi có một nhóm các tệp có phần mở rộng .htm, làm cách nào tôi có thể đổi tên tất cả chúng thành .html?
mv *.htm *.html
không hoạt động.
Nếu tôi có một nhóm các tệp có phần mở rộng .htm, làm cách nào tôi có thể đổi tên tất cả chúng thành .html?
mv *.htm *.html
không hoạt động.
Câu trả lời:
Hoặc, bạn có thể sử dụng bash thuần túy ... (ngoại trừ mv, nghĩa là ..)
for file in *.htm; do mv "$file" "${file%.htm}.html"; done
và tránh những thứ cơ sở khó chịu. ;)
Bash có một loạt các tùy chọn mở rộng biến. Cái được sử dụng ở đây, '%', loại bỏ hậu tố phù hợp nhỏ nhất khỏi giá trị của biến. Các mô hình là một mô hình toàn cầu, do đó ${file%.*}
cũng sẽ làm việc. Toán tử '%%' loại bỏ hậu tố phù hợp lớn nhất và có thể hoán đổi cho nhau trong ví dụ trên, vì mẫu đã được sửa, ${file%%.*}.html
sẽ biến abhtm thành a.html.
Xem phần biến thế của trang bash để biết các thủ thuật gọn gàng hơn. Có rất nhiều thứ có thể được thực hiện trong bash trực tiếp.
Không nên có khoảng trắng, dòng mới hoặc khoảng trắng khác trong tên tệp, nhưng phiên bản trả lời của freiheit này xử lý chúng. Nó cũng sử dụng $()
thay vì backticks để dễ đọc cùng với các lợi ích khác.
for file in *.htm
do
mv "$file" "$(basename "$file" .htm).html"
done
Thậm chí tốt hơn - đối với trường hợp đặc biệt chỉ thêm vào cuối:
for file in *.htm
do
mv "$file" "${file}l"
done
rename(1)
là một tiện ích Perl thực hiện chính xác những gì bạn muốn. Trong trường hợp này:
rename 's/\.htm$/.html/' *htm
hoặc nếu bạn đang sử dụng thư mục con là tốt
(yêu cầu Bash 4.0 và các thiết lập globstar: shopt -s globstar
)
rename 's/\.htm$/.html/' **/*htm
rename
đi kèm với perl, và về cơ bản mọi unix đều đi kèm với perl những ngày này.
shopt -s globstar
(tắt theo mặc định). Ngoài ra, Linux và Unix có các thư mục hơn là các thư mục.
for file in *.htm; do
mv $file `basename "$file" .htm`.html
done
Hãy thử nó với một echo
ở phía trước của mv
lần đầu tiên xung quanh.
Vấn đề với bản gốc của bạn là " mv *.htm *.html
" có *
s được xử lý bởi shell, vì vậy mv
lệnh chỉ đơn giản nhìn thấy một danh sách tất cả các tệp .htm và .html trong thư mục hiện tại. Nói cách khác, một cái gì đó như " mv foo.htm bar.htm stuff.htm six.htm file.htm
". mv chỉ biết cách xử lý nhiều hơn 2 đối số nếu cái cuối cùng là một thư mục.
mv
sẽ không hoạt động.
Công cụ tốt nhất là mmv .
mmv \*.htm #1.html
Các ví dụ khác về việc sử dụng (và của các công cụ khác) trong " Tóm tắt các công cụ dòng lệnh GNU / Linux ".
#
.
Gói tiện ích linux-ng (trên Fedora) có rename
lệnh tương tự như lệnh được đề cập bởi TRS-80 . Bạn có thể sử dụng nó như thế này:
rename .htm .html *.html
ren *.htm *.html
sẽ hoạt động trong Windows.