Điểm:2

Làm cách nào để chuyển đổi đệ quy tất cả các tệp JPG thành một tệp PDF trong mỗi thư mục bằng img2pdf?

lá cờ us
Sam

Tôi có ba cấp thư mục như chính, phụ 1 và phụ 2. thư mục chính của tôi có nhiều thư mục phụ 1 và thư mục phụ 1 có nhiều thư mục phụ 2 có hình ảnh JPG bên trong.

Tôi sao chép các tệp JPG từ phụ 2 sang thư mục phụ 1 chính của nó TỪ thư mục chính bằng cách sử dụng lệnh này.

tìm thấy . -type f -name "*.jpg" -exec sh -c 'cho p; làm
  cp "$p" "${p%/*/*}"
xong' _ {} +

Bây giờ tôi phải chuyển đổi tất cả các jpg thành một tệp pdf bên trong mỗi thư mục phụ 1 từ thư mục MAIN của mình, vì vậy sẽ có tất cả các jpg đã sao chép của tôi cùng với pdf đã chuyển đổi trong thư mục phụ 1 (tên pdf phải là tên thư mục cũ: sub- 1). sau khi chuyển đổi xong, tôi chỉ phải xóa các jpg đã sao chép trong thư mục phụ 1 (không phải jpg gốc), vì vậy sẽ có nhiều thư mục phụ 2 với một tệp pdf.

Tôi đang sử dụng thư viện img2pdf để chuyển đổi hình ảnh của mình. và tôi đã thử lệnh này bên dưới nó không hoạt động, tôi không thể tìm ra giải pháp nào. Bây giờ làm thế nào để tôi làm cho nó hoạt động?

tìm thấy . -name '*.jpg' -type f -exec bash -c 'img2pdf *.jpg -o "${PWD##*/}".pdf' {} + \
sudodus avatar
lá cờ jp
Sử dụng dấu ngoặc đơn `'` có thể sẽ không cho phép ${...} mở rộng như dự định.Tôi nghĩ bạn không cần gói 'imp2pdf command line' trong `bash -c ' ...'`
Sam avatar
lá cờ us
Sam
Mình đã thử vẫn không được
sudodus avatar
lá cờ jp
VÂNG. Tôi đã phải kiểm tra các chi tiết bằng cách thử nghiệm. Xem câu trả lời dưới đây.
Điểm:1
lá cờ jp

Tôi đã thực hiện một số thử nghiệm trong cây thư mục Ảnh của mình và hệ thống sau với hai shellscript phù hợp với tôi.

đầu tiên:

#!/bin/bash

tìm * -type d -exec thứ hai {} \;
tiếng vang ""

thứ hai:

#!/bin/bash

num=$(ls "$1"/*.jpg 2> /dev/null | wc -l)
nếu [ $num -ne 0 ]
sau đó
 tiếng vang -n "."
 img2pdf -o "$1/${1//\//-}_${num}_pictures".pdf "$1"/*.jpg
fi

Chỉnh sửa hai lần: Tập lệnh thay thế thứ hai tạo một tệp pdf không có số ảnh và 'hình ảnh' trong tên:

#!/bin/bash

num=$(ls "$1"/*.jpg 2> /dev/null | wc -l)
nếu [ $num -ne 0 ]
sau đó
 tiếng vang -n "."
 img2pdf -o "$1/${1##*/}".pdf "$1"/*.jpg
fi
  • Sao chép và dán từ các vùng mã vào trình soạn thảo văn bản và tạo tệp đầu tiênthứ hai

  • Làm cho chúng có thể thực thi được

    chmod +x giây đầu tiên
    
  • di chuyển chúng đến một thư mục trong PATH. Nếu đây chỉ là mục đích sử dụng cá nhân của bạn, hãy [tạo và] chuyển chúng vào ~/thùng. Mặt khác, nếu những người dùng khác cũng nên sử dụng các shellscript này, hãy chuyển chúng vào /usr/local/bin

    mkdir ~/bin
    mv giây đầu tiên ~/bin
    

    Bạn có thể cần phải khởi động lại để có được ~/thùng vào ĐƯỜNG của bạn.

Bây giờ bạn đã sẵn sàng để sử dụng chúng. Thay đổi thư mục lên trên cùng hoặc cây thư mục, nơi bạn có hình ảnh của mình và chạy đầu tiên.

Ví dụ (nhưng bạn có tên địa phương, không có Hình ảnh như tiếng Anh),

cd ~/Hình ảnh
đầu tiên

Nó sẽ ghi một dấu chấm vào cửa sổ đầu cuối cho mỗi thư mục con nơi nó tìm thấy ít nhất một ảnh và tạo tệp pdf.

Bạn có thể tìm thấy các tệp pdf bằng lệnh sau

tìm tên "*.pdf"

chỉnh sửa lớn:

Sau khi thảo luận với người đăng ban đầu, tôi nghĩ rằng tôi đã hiểu cấu trúc của cây thư mục sẽ được xử lý. Bản sao của các tệp ở cấp độ thấp hơn được đặt trong các thư mục phụ 1 có tên người. Các tệp trong các thư mục phụ 1 này sẽ được hợp nhất thành các tệp pdf.

Ví dụ:

cây $ -U
.
âââ adam
â âââ mkusb-minp-2-crop.jpg
â âââ us_keyboard_for_sudo_password.jpg
â âââ nautilus-connect-to-server-2.jpg
â âââ pic1
â â  âââ mkusb-minp-2-crop.jpg
â â  âââ nautilus-connect-to-server-2.jpg
â âââ pic2
â â  âââ us_keyboard_for_sudo_password.jpg
â âââ adam.pdf
âââ xinh
    âââ nautilus-connect-to-server-1.jpg
    âââ mkusb-minp-3-cropx.jpg
    âââ pic1
    â âââ nautilus-connect-to-server-1.jpg
    â âââ calamares-mount-failed.jpg
    âââ pic2
    â âââ mkusb-minp-3-cropx.jpg
    âââ calamares-mount-failed.jpg
    âââ betty.pdf

6 thư mục, 14 tập tin

Nếu bạn thay đổi thư mục làm việc với đĩa CD đến nơi đặt các thư mục tên này, bạn có thể sử dụng sửa đổi sau đầu tiên shellscript.

#!/bin/bash

tìm -mindepth 1 -maxdepth 1 -type d -exec second {} \;
tiếng vang ""

Nó sẽ chạy thứ hai shellscript chỉ trong các thư mục tên và không tìm kiếm những gì ở cấp độ [trên hoặc] thấp hơn của cây thư mục.

Sau đây cho thấy làm thế nào tìm thấy chỉ tìm thấy các thư mục tên

$ tìm -mindepth 1 -maxdepth 1
./adam
./betty
sudodus avatar
lá cờ jp
Nếu bạn có tên tệp có dấu cách, có thể sẽ có vấn đề. Một giải pháp có thể là chuyển lệnh có `img2pdf` vào một tệp [shellscript] nhỏ thứ hai và gọi shellscript trong dòng lệnh bằng `find`. Bằng cách này, bạn có thể có dấu ngoặc kép quanh các tệp: `"*.jpg"` trong shellscript nhỏ thứ hai. Một giải pháp thay thế là thay thế khoảng trắng bằng dấu gạch dưới: `"tên tệp có dấu cách"` --> "`tên tệp_có_gạch dưới"`.
Sam avatar
lá cờ us
Sam
Tôi đã thử tập lệnh của bạn, nó đang tạo các tệp pdf trống trong mỗi thư mục có tên sai, tên thư mục của tôi bằng tiếng Ả Rập
sudodus avatar
lá cờ jp
Nó hoạt động với tôi với một ngôn ngữ Tây Âu không phải tiếng Anh. Có thể bạn gặp sự cố do tên thư mục hoặc tên tệp. Tôi khuyên bạn nên tạo tệp [shellscript] thứ hai và làm cho tệp đó hoạt động cho một thư mục. Sau đó, tạo tệp [bản shellscript chính] đầu tiên với `find` để gọi bản ghi shell thứ hai cho mỗi thư mục con chứa tệp. Bạn có thể tự làm điều đó hay bạn cần trợ giúp với nó? (Bạn có thể cần sự trợ giúp từ người sử dụng cùng một ngôn ngữ.)
Sam avatar
lá cờ us
Sam
Tôi hoàn toàn mới với tập lệnh này thưa ngài, tôi nghĩ có thể cần trợ giúp
sudodus avatar
lá cờ jp
OK @Looper, tôi đã thêm chi tiết cách tạo hệ thống có hai tập lệnh, trong đó `thứ nhất` gọi `thứ hai` cho mỗi thư mục con. Điều này phù hợp với tôi và tôi hy vọng rằng nó cũng hoạt động với tiếng Ả Rập. Nếu không, bạn cần sự trợ giúp từ người khác, người biết tiếng Ả Rập và/hoặc người biết rõ hơn cách quản lý các ký tự đặc biệt trong tên tệp.
Sam avatar
lá cờ us
Sam
Tôi đang chạy các tập lệnh trong Ubuntu bằng WSL2, vậy tôi cần di chuyển cả hai tập lệnh Shell vào đây ở đâu. Tôi bối rối (FYI tôi không có quyền quản trị viên)
sudodus avatar
lá cờ jp
Hãy để chúng tôi [tiếp tục cuộc thảo luận này trong cuộc trò chuyện](https://chat.stackexchange.com/rooms/129154/discussion-between-sudodus-and-looper).
sudodus avatar
lá cờ jp
@Looper OK, tôi không biết chính xác bạn muốn gì. Tôi nghĩ tốt nhất nên đặt tên nào đó để tránh đặt cùng tên cho nhiều tệp, nhưng có thể bản chỉnh sửa thứ hai của tệp thứ hai sẽ phù hợp với bạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.