ฉันจะไปเกี่ยวกับการเขียนสคริปต์เพื่อวนรอบทุกโฟลเดอร์ในฮาร์ดไดรฟ์ค้นหาไฟล์วิดีโอใด ๆ แยกพวกเขาไปยังรากของฮาร์ดไดรฟ์แล้วลบทุกอย่างอื่นได้อย่างไร
ฉันจะไปเกี่ยวกับการเขียนสคริปต์เพื่อวนรอบทุกโฟลเดอร์ในฮาร์ดไดรฟ์ค้นหาไฟล์วิดีโอใด ๆ แยกพวกเขาไปยังรากของฮาร์ดไดรฟ์แล้วลบทุกอย่างอื่นได้อย่างไร
คำตอบ:
โดยทั่วไปหากคุณต้องการ "วนรอบ" เหนือชุดไฟล์ใน Linux คุณไม่ต้องการเขียน Bash loop จริง (เช่น for
) แต่ใช้ find
แทน. ต่อไปนี้ควรใช้ได้กับทุกรุ่น find
และลีนุกซ์รุ่นลีนุกซ์มาพร้อมกับ GNU find
, มีคู่มือ แน่นอนคุณควรอ่านในบางจุด
ระวังด้วยคำสั่งต่อไปนี้ หากคุณไม่รู้ว่ากำลังทำอะไรหรือไม่ตรวจสอบผลลัพธ์ก่อน ได้ สูญเสียข้อมูลอย่างถาวร
find / ภูเขา / ไดรฟ์ - ประเภท f \ (- ชื่อ "* .mp4" -o -iname "* .avi" \) \ -exec echo mv '{}' / mount / ไดรฟ์ / \;
นี่จะพิมพ์รายการของ mv
คำสั่ง เมื่อคุณแน่ใจว่าทำในสิ่งที่คุณต้องการแล้วให้ลบ echo
จากคำสั่งและดำเนินการอีกครั้ง
บันทึก:
-type f
จะ จำกัด ผลลัพธ์เป็นไฟล์เท่านั้น find
จะเขียนทับไฟล์ที่มีชื่อเดียวกันโดยไม่มีคำเตือน เพื่อหลีกเลี่ยงการชนใช้ mv -i
ซึ่งจะแจ้งให้คุณทราบในกรณีเช่นนี้ -o -iname "*.mov"
และอื่น ๆ ในขั้นตอนที่สองเราจะลบทุกสิ่งที่ไม่ได้อยู่ในรากของไดรฟ์ ในการทำเช่นนั้นเราต้องการสองคำสั่งเนื่องจากคุณต้องการลบไฟล์ทั้งหมด ...
find / ภูเขา / ไดรฟ์ -mindepth 2 -type f
เมื่อคุณแน่ใจว่าสิ่งนี้แสดงทุกสิ่งที่คุณต้องการลบให้เพิ่ม -delete
เพื่อคำสั่ง ที่นี่ mindepth 2
ทำให้แน่ใจว่ารูทของคุณ (พร้อมวิดีโอทั้งหมดในนั้น) จะไม่ถูกแตะต้อง
จากนั้นค้นหาโฟลเดอร์ว่างที่เหลืออยู่:
find / ภูเขา / ไดรฟ์ -mindepth 1 -depth -type d -empty
คล้ายกับข้างต้นเพิ่ม -delete
ในคำสั่งนี้เพื่อลบไดเรกทอรีที่ว่างเปล่า
{}
.
-type f
ใช้กับทั้งสองอย่างหากคุณจัดกลุ่มเงื่อนไข ในแง่ของการเคลื่อนย้ายและการโต้แย้งหลาย ๆ ข้อสามารถใช้ได้กับ GNU เท่านั้น find
(และ GNU Coreutils mv
) แต่ find … -exec mv -t /mount/drive '{}' \+
ควรทำเคล็ดลับ
find
และโดยเฉพาะอย่างยิ่ง-exec
สวิตซ์. จับคู่ชื่อไฟล์ผ่าน-iregex
หรือ-iname
.