Score:0

ย้ายรูปภาพไปยังไดเร็กทอรีแยกต่างหากหลังจากอ่านชื่อจากไฟล์ใน bash

ธง us

ฉันกำลังพยายามอ่านชื่อรูปภาพจากข้อความไฟล์ซึ่งก็คือ rgb_train_ids.txtจากนั้นฉันจะย้ายรูปภาพหลังจากอ่านชื่อไปยังโฟลเดอร์ใหม่ซึ่งก็คือ รถไฟ.

#!/bin/bash

สำหรับไฟล์ใน $(cat rgb_train_ids.txt); ทำ 
     mv "$file.png" "รถไฟ"; 
เสร็จแล้ว

เมื่อฉันรันสคริปต์ทุบตีด้านบน มันจะย้ายเฉพาะรูปภาพที่สองเท่านั้น img_2 และแสดงสิ่งนี้:

mv: ไม่สามารถ stat 'img_1'$'\r''.png': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

ฉันสังเกตเห็นว่ามันย้ายบรรทัดสุดท้ายในข้อความไฟล์เสมอ
ฉันไม่รู้ว่าปัญหาอยู่ที่ไหน คุณช่วยฉันได้ไหม

ป้อนคำอธิบายรูปภาพที่นี่

Score:1
ธง hr

เดอะ $'\r' แสดงว่าบรรทัดในของคุณ rgb_train_ids.txt มีการลงท้ายบรรทัดแบบ DOS ซึ่งประกอบด้วย CRLF ลำดับ 2 อักขระ Linux คาดหวังให้ไฟล์ใช้เพียง LF คุณสามารถแปลงไฟล์โดยใช้ ดอส2ยูนิกซ์ ยูทิลิตี้หรือถอดอักขระ CR ออกโดยใช้ หรือ เสด ตัวอย่างเช่น.

เช่นเดียวกับการวนซ้ำบรรทัดโดยใช้ สำหรับไฟล์ใน $(cat rgb_train_ids.txt) เป็นแนวทางปฏิบัติที่ไม่ดี - จะล้มเหลวหากบรรทัดมีช่องว่างหรืออักขระพิเศษของเชลล์อื่น ๆ คุณควรพิจารณาใช้ ในขณะที่ วนซ้ำแทน:

ในขณะที่ IFS= อ่าน -r ไฟล์; ทำ
  mv "$file.png" รถไฟ/
เสร็จสิ้น < <(tr -d '\r' < rgb_train_ids.txt)

ต่อท้าย / บน รถไฟ/ เป็นมาตรการความปลอดภัยที่จะทำให้ เอ็มวี คำสั่งข้อผิดพลาดถ้าไดเร็กทอรี รถไฟ ไม่มีอยู่ - แทนที่จะเปลี่ยนชื่อแต่ละไฟล์โดยไม่ได้ตั้งใจ หรือคุณสามารถใช้ mv -t รถไฟ "$file.png" เพื่อให้ชัดเจนว่า รถไฟ คือ ไดเร็กทอรีเป้าหมาย.

ดูสิ่งนี้ด้วย

คุณยังสามารถพิจารณาใช้ xargs แทนที่จะเป็นเชลล์ลูป:

tr -d '\r' < rgb_train_ids.txt | xargs -d '\n' mv -t รถไฟ
Abanoub Asaad avatar
us flag
ขอบคุณมาก ฉันขอขอบคุณเวลาและความพยายามของคุณจริงๆ!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา