Làm thế nào để thay thế khoảng trắng trong tên tệp?


8

tôi đã thử nó theo cách sau:

rename 'bla bla .txt' blabla.txt

Nhưng điều này không hiệu quả, cú pháp chính xác cho trường hợp này là gì?

Câu trả lời:


15

Bạn không nên sử dụng renameđể đổi tên chỉ một tệp, thay vào đó , hãy sử dụng mv(1) .

Hơn nữa, để thoát khỏi whitepsace, hãy thêm tiền tố vào \:

"Ubuntu One"Ubuntu\ One

Lệnh của bạn sẽ là

mv bla\ bla.txt blabla.txt
  • dấu gạch chéo ngược cho bash rằng ký tự tiếp theo bằng cách nào đó đặc biệt, ví dụ như \a'chuông', \cho một không gian theo nghĩa đen và v.v.

    xem man ascii(7) để biết thêm

Ngoài ra, vì bạn hiện đang sử dụng lệnh chính xác mv, bạn có thể trích dẫn tên tệp nếu có nhiều khoảng trắng:

mv "bla    bla.txt" blabla.txt

(Điều này sẽ bla\ \ \ \ bla.txtở dạng thoát)

  • Trong bash, các chuỗi được trích dẫn (dấu ngoặc đơn hoặc dấu ngoặc kép) được coi là một đối số, trong khi các chuỗi không trích dẫn sẽ được chia thành nhiều đối số, như sau:

    • ["mv", "bla", "bla.txt", "blabla.txt", ]

    mvmong đợi:

    • ["mv", "source", "destination", ]
  • Lưu ý: nhập 'mv' và một vài ký tự đầu tiên của tên tệp và nhấn TABsẽ cung cấp cho bạn phiên bản thoát của tên tệp, giúp việc đổi tên nhanh chóng và dễ dàng.


renameđược sử dụng để xử lý hàng loạt việc đổi tên tệp bằng biểu thức chính quy, như được minh họa trong ví dụ từ trang man của nó :

rename 's/\.bak$//' *.bak

Để loại bỏ bất kỳ sự xuất hiện nào của .bak (ở cuối chuỗi [$]) khỏi tất cả các tệp khớp với "* .bak".


cảm ơn, làm thế nào để xem lệnh nếu có nhiều khoảng trắng trong tên tệp gốc? Có một regex đơn giản để không cần phải thoát khỏi mọi khoảng trắng không?
NES

Đã cập nhật câu trả lời để giải quyết nhiều khoảng trắng và dấu ngoặc kép đơn.
Stefano Palazzo

Có một sự khác biệt giữa dấu ngoặc đơn và dấu ngoặc kép, nhưng nó không liên quan đến vấn đề này. Xem bài viết này để biết chi tiết chính xác của nó
Stefano Palazzo

4

đổi tên là lệnh chuyên biệt để đổi tên hàng loạt. Vô tình, cái mà chúng ta thường gọi là "đổi tên" thực sự là "chuyển" sang một tên mới:

mv 'bla bla .txt' blabla.txt

sự khác biệt giữa viết tên tệp trong dấu ngoặc đơn và dấu ngoặc kép là gì?
NES

4
Trích dẫn kép cho phép các biến được mở rộng và thay thế quá trình; trích dẫn duy nhất không. A=bla ; mv "$A $A .txt" blabla.txtsẽ di chuyển bla bla .txt, nhưng A=bla ; mv '$A $A .txt' blabla.txtsẽ tìm một tệp thực sự có tên "$ A $ A .txt". Một trong hai sẽ làm việc cho ví dụ của bạn mặc dù.
frabjous

1
rename "s/\s//g" "bla bla.txt"

s là lệnh sed Thay thế.

\ s là dành cho WhiteSpace

Bạn đang thay thế không có gì. Chuỗi thay thế khác đi sau dấu gạch chéo thứ hai.

g là dành cho Toàn cầu, tức là thay thế mọi trường hợp. Bỏ qua g chỉ thay thế phiên bản đầu tiên.


Lệnh này sẽ thay thế khoảng trắng bằng dấu gạch dưới trong tất cả các tệp:

rename "s/\s/_/g" *
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.