Lưu ý rằng bạn đang sử dụng tập lệnh Perl đượcrename
phân phối bởi Debian và các công cụ phái sinh (Ubuntu, Mint, cám). Các bản phân phối Linux khác cung cấp một lệnh hoàn toàn khác và ít hữu ích hơn, được gọi là rename
.
y/A-Z/a-z/
dịch từng ký tự trong phạm vi A
thông qua Z
thành ký tự tương ứng trong phạm vi a
thông qua z
, tức là các chữ cái viết hoa ASCII thành chữ cái viết thường tương ứng. Để thực hiện dịch ngược lại, sử dụng y/a-z/A-Z/
. Một cách khác để viết cùng một lệnh là rename '$_ = uc($_)' *
- uc
là hàm u pper c ase và rename
lệnh đổi tên các tệp dựa trên phép chuyển đổi được thực hiện cho $_
biến.
rename '…' *
chỉ đổi tên các tệp trong thư mục hiện tại, vì đó là những gì *
phù hợp. Các tệp chấm (tệp có tên bắt đầu .
) cũng bị bỏ qua.
Nếu bạn muốn đổi tên các tệp trong thư mục hiện tại và trong thư mục con theo cách đệ quy, bạn có thể sử dụng find
lệnh để duyệt qua thư mục hiện tại theo cách đệ quy. Có một khó khăn ở đây: nếu bạn gọi rename
, điều này đổi tên cả thư mục và phần tên cơ sở. Nếu bạn gọi rename
vào một thư mục trước khi đệ quy vào nó ( find -exec rename … {} \;
), find
sẽ bị lẫn lộn vì nó tìm thấy một thư mục nhưng thư mục đó không còn tồn tại vào thời điểm nó cố gắng đi vào nó. Bạn có thể giải quyết vấn đề này bằng cách yêu find
cầu duyệt qua một thư mục trước khi hành động, nhưng sau đó bạn cố gắng đổi tên foo/bar
thành FOO/BAR
nhưng thư mục FOO
không tồn tại.
Một cách đơn giản để tránh khó khăn này là làm cho lệnh đổi tên chỉ hành động trên phần tên cơ sở của đường dẫn. Biểu thức chính quy ([^/]*\Z)
khớp với phần cuối cùng của đường dẫn không chứa a /
.
find . -depth -exec rename 's!([^/]*\Z)!uc($1)!e' {} +
Shell zsh cung cấp nhiều tính năng thuận tiện hơn cho việc đổi tên - thậm chí còn khó hiểu hơn Perl, nhưng phức tạp hơn và thường dễ soạn thảo hơn.
Hàm zmv
đổi tên tập tin dựa trên các mẫu. Chạy autoload -U zmv
một lần để kích hoạt nó (đặt dòng này trong của bạn .zshrc
).
Trong đối số đầu tiên zmv
(mẫu cần thay thế), bạn có thể sử dụng các mẫu ký tự đại diện mạnh mẽ của zsh . Trong đối số thứ hai với zmv
(văn bản thay thế), bạn có thể sử dụng các tính năng mở rộng tham số của nó , bao gồm các sửa đổi lịch sử .
zmv -w '**/*' '$1$2:u'
Giải trình:
-w
- tự động gán các biến số cho từng mẫu ký tự đại diện
**/*
- tất cả các tệp trong thư mục con, đệ quy ( **/
khớp 0, 1 hoặc nhiều cấp thư mục con)
$1
- biến số đầu tiên, ở đây khớp với phần thư mục của mỗi đường dẫn
$2:u
- biến số thứ hai, ở đây khớp với phần tên cơ sở của mỗi đường dẫn, với công cụ :u
sửa đổi để chuyển đổi giá trị thành chữ hoa
Là một phần thưởng bổ sung, điều này tôn trọng các cài đặt ngôn ngữ xung quanh.
Nếu bạn không chắc chắn về zmv
lệnh bạn đã viết, bạn có thể chuyển -n
tùy chọn để in những gì lệnh sẽ làm và không thay đổi bất cứ điều gì. Kiểm tra đầu ra và nếu nó làm những gì bạn muốn, hãy chạy lại lệnh mà không -n
thực sự hành động.
rename 'y/a-z/A-Z/' *
bạn sẽ có được thứ bạn muốn. Cẩn thận nơi bạn kiểm tra nó thông qua.