Tôi lấy ví dụ TREE.wav, ONE.WAV. Tôi muốn đổi tên nó thành tree.wav, one.wav. Làm cách nào để đổi tên tất cả các tệp thành chữ thường?
Tôi lấy ví dụ TREE.wav, ONE.WAV. Tôi muốn đổi tên nó thành tree.wav, one.wav. Làm cách nào để đổi tên tất cả các tệp thành chữ thường?
Câu trả lời:
Nếu bạn thấy thoải mái với thiết bị đầu cuối:
cd
rồi kéo và thả Thư mục chứa các tệp cần đổi tên vào cửa sổ.ls
và nhấn enter.Dán mã này và nhấn enter:
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
ls
và nhấn enter một lần nữa.(Cảm ơn @bavarious trên twitter về một số bản sửa lỗi và cảm ơn John Whitley bên dưới vì đã làm cho điều này an toàn hơn trên các hệ thống tệp không phân biệt chữ hoa chữ thường).
foo.txt
và FOO.TXT
, điều này có thể chặn một trong số chúng.
mv "$f" "${f,,}"
hoặcdeclare -l g=$f; mv "$f" "$g"
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
Câu hỏi khi được hỏi là chung chung và cũng quan trọng, vì vậy tôi muốn cung cấp câu trả lời tổng quát hơn:
Trường hợp đơn giản nhất (an toàn hầu hết thời gian và trên Mac OS X, nhưng hãy đọc tiếp):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Bạn cũng cần xử lý khoảng trắng trong tên tệp (bất kỳ hệ điều hành nào):
IFS=$'\n' ; for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
Bạn cần phải xử lý an toàn các tên tệp chỉ khác nhau theo từng trường hợp trong hệ thống tệp phân biệt chữ hoa chữ thường và không ghi đè lên đích (ví dụ: Linux):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done
Lưu ý về Mac OS X:
Hệ thống tập tin của Mac không phân biệt chữ hoa chữ thường, bảo toàn chữ hoa chữ thường.
Tuy nhiên, không cần tạo tệp tạm thời, như được đề xuất trong câu trả lời và nhận xét được chấp nhận, bởi vì hai tên tệp chỉ khác nhau theo trường hợp không thể tồn tại ngay từ đầu, ref .
Để hiển thị điều này:
$ mkdir test
$ cd test
$ touch X x
$ ls -l
total 0
-rw-r--r-- 1 alexharvey wheel 0 26 Sep 20:20 X
$ mv X x
$ ls -l
total 0
-rw-r--r-- 1 alexharvey wheel 0 26 Sep 20:20 x