Làm cách nào để loại bỏ mã hóa URI khỏi tên tệp?


7

Tôi nhận ra đây có thể là một câu hỏi khá đơn giản, nhưng tôi vẫn còn khá mới đối với dòng lệnh và chỉ nắm được các lệnh cơ bản.

Tôi đã tải xuống một số bài thuyết trình (~ 25 hoặc hơn) từ Đại học của tôi, tuy nhiên khi làm như vậy họ đã được đặt tên là ...

L2%20Development%20of%20immune%20system.pptx
L4%20Molecular%20Recognition.pdf

Như bạn có thể thấy họ đã tải xuống bằng mã hóa URL %20thay vì khoảng trắng.

Câu hỏi của tôi là làm thế nào để đổi tên hàng loạt tất cả các tệp này để %20thay thế và xóa bằng một khoảng trắng?


Sai lầm của tôi, tôi đã cố gắng tìm kiếm nhưng nó phải trốn tránh những nỗ lực của tôi. Các câu trả lời ở đây là khá hữu ích và giải thích tốt mặc dù.
Ben

3
Và câu hỏi khá hữu ích khi được khái quát hóa để hoàn tác mã hóa URI.
Stéphane Chazelas

Cũng được đề cập trong câu hỏi sau: unix.stackexchange.com/questions/159253/NH (mà theo tôi có vẻ khá trùng lặp với câu hỏi này theo một cách nào đó)
cú pháp

Câu trả lời:


9

Trên Debian và các dẫn xuất (bao gồm Ubuntu), bạn có thể sử dụng rename, áp dụng biểu thức Perl cho mỗi tên tệp.

rename 's/%20/ /g' L*
        |  |  | |   |
        |  |  | |   +--- Files to match
        |  |  | +------- globally
        |  |  +--------- with space
        |  +------------ %20
        +--------------- Substitute

Tôi sẽ xem xét sử dụng dấu gạch dưới thay vì không gian - vì nó thường làm cho cuộc sống dễ dàng hơn trong thế giới cli.

Để khái quát cho tất cả mã hóa URI:

rename 'use URI::Escape; $_ = uri_unescape $_' *%*

7

Bạn có thể sử dụng deurlnametừ renameutils .

$ ls
L4%20Molecular%20Recognition.pdf
$ deurlname L4%20Molecular%20Recognition.pdf
$ ls
L4 Molecular Recognition.pdf

Tôi đã viết một tập lệnh cho phép bạn đổi tên các tập tin trong một trình soạn thảo.

Bạn chỉ cần truyền cho tập lệnh một tên tệp và nó sẽ mở trình soạn thảo của bạn với tên tệp trong đó. Sau đó, bạn chỉnh sửa tên tệp, viết và đóng trình chỉnh sửa.

$ ls
  L4%20Molecular%20Recognition.pdf
$ viname L4%20Molecular%20Recognition.pdf
  ======================
  L4%20Molecular%20Recognition.pdf█
  ======================

  ======================
  L4-Molecular-Recognition.pdf█
  ======================
  (pretend this is an editor)
$ ls
  L4-Molecular-Recognition.pdf

Tôi cũng đã viết một tập lệnh tự động đổi tên các tập tin để phù hợp với sơ đồ đặt tên ưa thích của tôi. Khi tôi tải tập tin, điều đầu tiên tôi làm là gọi tập lệnh này trên chúng.

$ ls
  L4%20Molecular%20Recognition.pdf
$ nf L4%20Molecular%20Recognition.pdf
  'L4%20Molecular%20Recognition.pdf' renamed to 'l4-molecular-recognition.pdf'
$ ls
  L4-molecular-recognition.pdf

Hãy cẩn thận với kịch bản đó. Nó có thể làm một số đổi tên khá ấn tượng. Sử dụng nf -ntùy chọn run ( ) trước khi đổi tên bất kỳ tệp nào.


4

Bạn có thể sử dụng convmvtrong thư mục nơi bạn có các tệp:
Để kiểm tra đầu ra sẽ là gì:

convmv --unescape *%20*

Để thực sự đổi tên các tập tin thêm --notest:

convmv --unescape --notest *%20*

4

Một cách khác không dựa vào các công cụ bên ngoài bên ngoài bash:

for old in *; do
    new="${old//+/ }"
    printf -v new '%b' "${new//%/\x}"
    mv -- "$old" "$new"
done

Câu trả lời tuyệt vời nếu bạn đến trang này để tìm giải pháp MacOS (như tôi).
Tim Mackey
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.