Điểm:0

Di chuyển hình ảnh vào một thư mục riêng biệt sau khi đọc tên của chúng từ một tệp trong bash

lá cờ us

Tôi đang cố đọc tên của hình ảnh từ tệp văn bản rgb_train_ids.txt, và sau đó tôi sẽ di chuyển các hình ảnh sau khi đọc tên của chúng sang một thư mục mới Tàu hỏa.

#!/bin/bash

đối với tệp ở định dạng $(cat rgb_train_ids.txt); làm 
     mv "$file.png" "Train"; 
xong

Khi tôi thực thi tập lệnh bash ở trên, nó chỉ di chuyển hình ảnh thứ hai img_2 và cho thấy điều này:

mv: không thể thống kê 'img_1'$'\r''.png': Không có tệp hoặc thư mục như vậy

Tôi đã nhận thấy rằng, nó luôn di chuyển dòng cuối cùng trong tệp văn bản.
Tôi không biết vấn đề ở đâu, bạn có thể giúp tôi không?

nhập mô tả hình ảnh ở đây

Điểm:1
lá cờ hr

Các $'\r' chỉ ra rằng các dòng trong của bạn rgb_train_ids.txt có kết thúc dòng kiểu DOS, bao gồm chuỗi 2 ký tự CRLF. Linux mong muốn các tệp chỉ sử dụng LF. Bạn có thể chuyển đổi tập tin bằng cách sử dụng dos2unix tiện ích hoặc loại bỏ các ký tự CR bằng cách sử dụng tr hoặc sed Ví dụ.

Đồng thời, lặp qua các dòng bằng cách sử dụng cho tệp trong $(cat rgb_train_ids.txt) là một thực tiễn tồi - nó sẽ thất bại nếu các dòng chứa khoảng trắng hoặc các ký tự đặc biệt khác của hệ vỏ. Bạn nên cân nhắc sử dụng một trong khi vòng lặp thay thế:

trong khi IFS= đọc tệp -r; làm
  mv "$file.png" Tàu/
xong < <(tr -d '\r' < rgb_train_ids.txt)

dấu vết / trên Tàu hỏa/ là một biện pháp an toàn sẽ gây ra mv lệnh báo lỗi nếu thư mục Tàu hỏa không tồn tại - thay vì vô tình đổi tên từng tệp. Ngoài ra, bạn có thể sử dụng mv -t Tàu "$file.png" để làm cho nó rõ ràng rằng Tàu hỏathư mục đích.

Xem thêm

Bạn cũng có thể xem xét sử dụng xargs chứ không phải là một vòng lặp Shell:

tr -d '\r' < rgb_train_ids.txt | xargs -d '\n' mv -t Tàu hỏa
Abanoub Asaad avatar
lá cờ us
Cảm ơn bạn rất nhiều, tôi thực sự đánh giá cao thời gian và nỗ lực của 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.