Score:0

จะลบรายชื่อไฟล์ที่ไม่มีพาธที่ตรงกันในหลายไดเร็กทอรีย่อยได้อย่างไร

ธง uz

จะลบรายชื่อไฟล์ที่ไม่มีพาธที่ตรงกันในหลายไดเร็กทอรีย่อยได้อย่างไร

Delete_list.txt อาจมี (แต่ละชื่อไฟล์ต่อบรรทัด):

ก.jpg
ข.jpg
ค.jpg

ไฟล์เหล่านี้อาจมีอยู่ในหลายไดเร็กทอรีย่อย ฉันต้องการลบมันทั้งหมด ฉันพยายามแล้ว แต่ไม่สำเร็จ:

สำหรับ f ใน $(delete_list.txt); หา . -ชื่อ "$f" -ประเภท f -delete ; เสร็จแล้ว 

ลองครั้งที่ 2

  f ใน $(delete_list.txt); หา . -ชื่อ "$f" -ประเภท f -exec rm -f {} \;

ลองครั้งที่ 3

ในขณะที่ IFS= read -r ไฟล์ ; ทำ rm -r -- "$file" ; เสร็จสิ้น < delete_list.txt

ลองครั้งที่ 4

สำหรับ f ใน $(delete_list.txt); ทำถ้า [ -f $f ]; จากนั้น rm $f; ไฟ; เสร็จแล้ว
ar flag
คุณช่วยกรุณาเขียนสคริปต์ใหม่เพื่อให้แต่ละคำสั่งอยู่ในบรรทัดแยกกันและเยื้องตามความเหมาะสมได้ไหม นี่เป็นเรื่องยากมากที่จะอ่าน ดูเหมือนว่าคุณมีความพยายามที่แตกต่างกัน 3 ครั้งในสคริปต์ที่สับสนทั้งหมด
bac0n avatar
cn flag
หมายเหตุ: แม้ว่าจะไม่แนะนำ แต่ฉันแนะนำอย่างยิ่งให้คัดค้าน ไวยากรณ์คือ `$(
Score:3
ธง hr

ในเชลล์เช่น bash ที่รองรับอาร์เรย์ คุณสามารถรวมชื่อทั้งหมดเป็นชื่อเดียวได้ หา เพรดิเคต

#!/bin/bash

ประกาศ -a namep=()

ในขณะที่ IFS= อ่าน -r ชื่อ; ทำ 
  namep+=( -ชื่อ "$ชื่อ" -o )
เสร็จสิ้น < delete_list.txt

unset namep[-1] # ลบส่วนต่อท้าย -o

หา . -พิมพ์ f \( "${namep[@]}" \) -พิมพ์

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

Elias Estatistics avatar
uz flag
เร็วมาก! ในไม่กี่นาทีลบไฟล์หลายพันไฟล์ภายใต้ไดเร็กทอรีย่อยกว่าพัน !!! คุณช่วยอธิบายเพิ่มเติมว่า "อาร์เรย์" ใน bash คืออะไร และนำไปใช้อย่างไร / ใช้งานในระบบได้อย่างไร และทำไมมันถึงเร็วกว่าตัวเลือกของฉันมาก
Elias Estatistics avatar
uz flag
"การนำภายนอก" หมายความว่าอย่างไร
hr flag
@EliasEstatistics เราต้องการให้ลำดับเริ่มต้นด้วย `-name` ไม่ใช่ `-o` ดังนั้นเราจึงลบองค์ประกอบอาร์เรย์ที่ 0
hr flag
... ฉันเพิ่งแก้ไขลำดับเล็กน้อย - อาจจะชัดเจนกว่านี้ไหม?
Elias Estatistics avatar
uz flag
ฉันต้องอ่านเกี่ยวกับอาร์เรย์ใน linux และ "การเป็นผู้นำภายนอก" ขอบคุณอย่างไรก็ตาม
Score:0
ธง uz

นี้ได้เคล็ดลับสำหรับฉัน. กำลังลบชื่อไฟล์ที่ตรงกันทั้งหมดในไฟล์ที่กำหนดภายใต้ไดเร็กทอรีย่อยทั้งหมด

อย่างไรก็ตาม มันช้ามาก delete_list.txt มีชื่อไฟล์ประมาณ 100 ชื่อภายใต้ไดเร็กทอรีย่อยกว่า 250,000 ไดเร็กทอรี

 ขณะอ่าน -r FILE; ทำ echo "$(find . -name "$FILE" -type f -delete): $FILE"; เสร็จสิ้น < delete_list.txt

โพสต์คำตอบ

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