ฉันจะไปเกี่ยวกับการเขียนสคริปต์เพื่อวนรอบทุกโฟลเดอร์ในฮาร์ดไดรฟ์ค้นหาไฟล์วิดีโอใด ๆ แยกพวกเขาไปยังรากของฮาร์ดไดรฟ์แล้วลบทุกอย่างอื่นได้อย่างไร
ฉันจะไปเกี่ยวกับการเขียนสคริปต์เพื่อวนรอบทุกโฟลเดอร์ในฮาร์ดไดรฟ์ค้นหาไฟล์วิดีโอใด ๆ แยกพวกเขาไปยังรากของฮาร์ดไดรฟ์แล้วลบทุกอย่างอื่นได้อย่างไร
คำตอบ:
โดยทั่วไปหากคุณต้องการ "วนรอบ" เหนือชุดไฟล์ใน 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.