วิธีรันคำสั่งในรายการชื่อไฟล์ในไฟล์?


11

ฉันได้แสดงรายชื่อของไฟล์ที่จะลบออกเป็นไฟล์ ฉันจะส่งไฟล์ไปยังrmคำสั่งเพื่อให้ลบทีละไฟล์ได้อย่างไร


คำตอบ:


11

หากคุณมีหนึ่งไฟล์ต่อบรรทัดวิธีหนึ่งคือ:

tr '\n' '\0' < list_of_files_to_be_deleted.txt | xargs -0 -r rm --

รายการไฟล์ถูกกำหนดเป็นอินพุตให้กับtrคำสั่งซึ่งเปลี่ยนตัวคั่นไฟล์จาก linefeed เป็น null ไบต์และxargsคำสั่งอ่านไฟล์ที่คั่นด้วยไบต์ null บนอินพุตและเรียกใช้คำสั่ง rm พร้อมกับไฟล์ที่ต่อท้ายด้วยอาร์กิวเมนต์


1
ฉันขอแนะนำให้ใช้rm --แทนrmเพื่อให้ชื่อไฟล์ที่อาจเริ่มต้นด้วยเส้นประจะไม่ถือว่าเป็นrmพารามิเตอร์
artyom

มันใช้งานไม่ได้กับเพื่อน ........ tr: extra operand monu.txt' Try tr --help 'สำหรับข้อมูลเพิ่มเติม rm: ตัวถูกดำเนินการที่หายไปลองใช้ `rm - ช่วย 'สำหรับข้อมูลเพิ่มเติม นี่คือทั้งหมดที่ฉันสามารถดู
monu

1
คุณอาจพลาด <หน้าชื่อไฟล์หรือไม่?
Jonas Berlin

ฉันปรับปรุงคำสั่ง xargs อีกเล็กน้อย - เพิ่ม - ตามคำแนะนำของ @artyom และเพิ่ม -r เพื่อให้แน่ใจว่ามันจะไม่รัน rm หากไม่มีไฟล์ที่จะลบ
Jonas Berlin

5

คำตอบข้างต้นนั้นใช้ได้ดีในการจัดการชื่อไฟล์ที่มีช่องว่างและ "caracters แปลก" แต่วิธีที่ง่ายที่สุดถ้าชื่อไฟล์นั้นมีเหตุผลก็คือ (คำเตือน bashism!):

rm $(< /the/file/with/names)

สำหรับเปลือกปกติ:

rm `cat /the/file/with/names`
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.