Score:0

คัดลอกเฉพาะไฟล์จากรายการไปยังไดเร็กทอรีใหม่จากโครงสร้างไดเร็กทอรีขนาดใหญ่

ธง in

ผมมีภาพดอกไม้กองโตตั้งแต่เตรียมหนังสือ ฉันจะใช้เพียงบางส่วนที่มีอยู่ในไฟล์ชื่อ choosen.txt (จริง ๆ แล้วคือ csv) ฉันต้องเลือกรายการที่เลือกจากโครงสร้างโฟลเดอร์ที่จัดระเบียบด้วยวิธีนี้:

รูปภาพ
âââ ดอกไม้ปี 2020
â âââ 1.- ฤดูใบไม้ผลิ 2020
â âââ 2.- ฤดูร้อน 2020
â âââ 3.- ฤดูใบไม้ร่วง 2020
â âââ 4.- ฤดูหนาว 2020
âââ ดอกไม้ปี 2021
    âââ 1.- ฤดูใบไม้ผลิ 2021
    âââ 2.- ฤดูร้อน 2021
    âââ 3.- ฤดูใบไม้ร่วง 2021
    âââ 4.- ฤดูหนาวปี 2021

10 ไดเร็กทอรี 5260 ไฟล์

และคัดลอกภาพดอกไม้ที่เลือกทุกภาพไปยังโฟลเดอร์ใหม่ที่เรียกว่า Chosen-ones (ตัวอย่าง) หวังว่าฉันจะอธิบายถูกต้องว่าฉันต้องทำอะไร

ด้านล่างนี้คือบางบรรทัดของไฟล์ csv เลือก. txt

DSC10233.jpg
DSC10276.jpg
DSC10288.jpg
DSC10399.jpg
DSC10448.jpg
DSC10489.jpg
DSC10492.jpg

เป็นไปได้ไหมที่จะใช้ Bash หรือสคริปต์ Python?

ขอบคุณล่วงหน้า.

br flag
@Vidal ดูเหมือนว่าความคิดเห็นด้านบนจะได้รับคำตอบจากคุณ สิ่งสุดท้ายคือชื่อไฟล์ใน `chosen.txt` จะซ้ำกันหรือไม่
user535733 avatar
cn flag
แน่นอนว่าเป็นไปได้...แต่การสอนให้คุณเขียนสคริปต์นั้นอาจใช้เวลานานกว่าการทำงานในขั้นตอนต่อไปในขั้นตอนการทำงานของคุณ ตัวอย่างเช่น คุณอาจต้องตรวจสอบภาพแต่ละภาพด้วยตนเองในระหว่างเค้าโครงของแต่ละหน้า และนั่นอาจเป็นเวลาที่ดีกว่าในการคัดลอกภาพถ่ายลงในไฟล์แยกต่างหาก (หรือลงในต้นฉบับโดยตรง)
Score:3
ธง kr

แน่นอน คุณสามารถทำได้ด้วยสคริปต์ Bash ขนาดเล็กมาก

ฉันถือว่าคุณมีรายชื่อ เลือก. txt ในไดเร็กทอรีหลักของคุณ ซึ่ง Pictures เป็นไดเร็กทอรีย่อย หากไม่เป็นเช่นนั้น โปรดปรับเส้นทางให้เหมาะสม

ก่อนอื่นให้สร้างไดเร็กทอรีเพื่อย้ายไฟล์เข้าไป ฉันถือว่าคุณเพิ่งเปิดเทอร์มินัลและคุณอยู่ในโฮมไดเร็กตอรี่ของคุณ คุณสามารถย้ายไดเร็กทอรีได้ในภายหลัง

mkdir ผู้ถูกเลือก

ตรวจสอบว่าคุณสามารถค้นหาไฟล์ที่ถูกต้องโดยใช้รายการของคุณดังนี้:

ในขณะที่อ่านบรรทัด -r; หา Pictures -name "$line" -ls; เสร็จสิ้น < เลือกแล้ว txt

หากผลลัพธ์ดูถูกต้อง คุณสามารถคัดลอกไฟล์ได้โดยปรับคำสั่ง:

ในขณะที่อ่านบรรทัด -r; ค้นหารูปภาพชื่อ "$line" -exec cp -vt ChosenOnes {} \; ; เสร็จสิ้น < เลือกแล้ว txt

เราสามารถทำให้ดูดีขึ้นเล็กน้อย:

#!/bin/bash
# อ่านรายการของเราและ
ในขณะที่อ่านบรรทัด -r; ทำ
  # ค้นหาไฟล์ในนั้นและคัดลอกไปยังไดเร็กทอรีใหม่
  ค้นหารูปภาพ -ชื่อ "$line" -exec cp -vt ChosenOnes {} \;
เสร็จสิ้น < เลือกแล้ว txt

คำอธิบาย

  • ในขณะที่อ่านบรรทัด -r; ทำสิ่งต่างๆ เสร็จแล้ว < ไฟล์อินพุตในขณะที่ วนซ้ำทำบางสิ่งต่อไปตราบเท่าที่มีเงื่อนไข ที่นี่เรากำลังขอให้รายการของเราอ่านทีละบรรทัด แต่ละบรรทัดจะถูกใส่เข้าไปในตัวแปร ไลน์ เพื่อให้เราสามารถเรียกใช้คำสั่งบางอย่างกับมันได้ เมื่อเราทำคำสั่งในบรรทัดนั้นเสร็จแล้ว บรรทัดถัดไปจะถูกอ่าน จนกว่าบรรทัดในไฟล์ของเราจะหมด
  • ค้นหาเส้นทาง -ชื่อ "$line" เดอะ หา คำสั่งทำการค้นหาแบบเรียกซ้ำจากเส้นทางที่กำหนด (รูปภาพในกรณีของเรา) ที่นี่เราใช้ -ชื่อ ตัวเลือกเพื่อค้นหาไฟล์ที่ตรงกับชื่อในรายการ
  • -ล เดอะ หา คำสั่งมีตัวเลือกในการแสดงรายการไฟล์ที่พบ สิ่งนี้มีประโยชน์สำหรับการตรวจสอบสิ่งที่พบก่อนที่จะดำเนินการใดๆ
  • -exec คำสั่ง {} \; เดอะ -ผู้บริหาร ตัวเลือกเพื่อค้นหารันคำสั่งที่กำหนดบนไฟล์ที่พบ (แสดงโดย {})
  • ซีพี -vt เดอะ -v ตัวเลือกทำให้ ซีพี บอกเราว่ากำลังทำอะไรอยู่ เดอะ -t ตัวเลือกระบุปลายทาง (เราให้ไดเรกทอรีปลายทางทันทีหลังจากนั้น); มิฉะนั้นจะถือว่าปลายทางเป็นอาร์กิวเมนต์สุดท้าย
Score:2
ธง ar

ใช่ มีหลายวิธีในการทำเช่นนี้ในบรรทัดคำสั่ง

สมมติว่าคุณมีเพียงรายชื่อไฟล์ (ไม่มีพาธ) คุณสามารถใช้ไฟล์ ในขณะที่ วนซ้ำเพื่ออ่านไฟล์ "chosen.txt" ของคุณ หา เพื่อค้นหาไฟล์ในโฟลเดอร์ต้นทางของคุณ และอื่นๆ ในขณะที่ วนซ้ำเพื่อคัดลอก

การกำหนดตัวแปรทำให้คุณสามารถใช้คำสั่ง long ซ้ำได้โดยไม่ต้องแก้ไข

list="/path/to/chosen.txt"
ที่มา="/path/to/Pictures"
ปลายทาง="/เส้นทาง/ถึง/ปลายทาง"
แมว "chosen.txt" \
| ขณะอ่าน n; ทำ 
      หา "$source" -name "$n" \
      | ในขณะที่อ่าน f; ทำ
            cp "$f" "$dest/"
        เสร็จแล้ว
  เสร็จแล้ว

หรือในบรรทัดเดียว:

แมว "chosen.txt" | ขณะอ่าน n; หา "$source" -name "$n" | ในขณะที่อ่าน f; ทำ cp "$f" "$dest/"; เสร็จแล้ว; เสร็จแล้ว

อีกทางเลือกหนึ่ง หากไฟล์ .csv ดั้งเดิมของคุณมีพาธไปยังไฟล์ด้วย จะสร้างรายการจากไฟล์นั้น จากนั้นคุณสามารถใช้ รีซิงค์ กับ --files-จาก= ตัวเลือกในการคัดลอกโดยการรักษาโครงสร้างไดเร็กทอรีดั้งเดิมของต้นทาง

Zanna avatar
kr flag
โอ้ ฉันชอบแนวคิด `rsync` สคริปต์ของคุณทำงานได้ดีสำหรับฉัน
Vidal avatar
in flag
ฉันชอบแนวคิด rsync ด้วย แต่น่าเสียดายที่ในกรณีนี้ รายการไม่มีพาธของไฟล์ที่ต้องการ
ar flag
@Vidal : หากรายการไม่มีเส้นทาง ผลลัพธ์ของคำสั่ง find จะมีเพื่อให้สามารถใช้สร้างรายการใหม่หรือส่งไปยัง rsync โดยตรง
Vidal avatar
in flag
ขอบคุณ. ฉันได้ทำเครื่องหมายคำถามว่าแก้ไขแล้วด้วยการวนรอบ while อย่างไรก็ตามจะลองใช้ rsync ด้วยเพราะฉันชอบคำสั่งนั้นมาก

โพสต์คำตอบ

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