ฉันจะตรวจสอบเนื้อหาของโฟลเดอร์สำหรับไฟล์บางไฟล์ได้อย่างไร


0

ฉันจะไปเกี่ยวกับการเขียนสคริปต์เพื่อวนรอบทุกโฟลเดอร์ในฮาร์ดไดรฟ์ค้นหาไฟล์วิดีโอใด ๆ แยกพวกเขาไปยังรากของฮาร์ดไดรฟ์แล้วลบทุกอย่างอื่นได้อย่างไร


ใช้ findและโดยเฉพาะอย่างยิ่ง -exec สวิตซ์. จับคู่ชื่อไฟล์ผ่าน -iregex หรือ -iname.
Daniel Andersson

คำตอบ:


4

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


คำตอบที่ยอดเยี่ยมสิ่งที่ดีที่สุดที่ฉันเคยได้รับใน StackExchange ขอบคุณมาก.
Conor Taylor

นี่จะค้นหาโฟลเดอร์ชื่อ '... avi' เช่นกัน IIRC นอกจากนี้ยังสามารถใช้งานได้กับ 2 ไฟล์ที่พบหรือไม่ IIRC เราคุยเรื่องนี้เมื่อเร็ว ๆ นี้พร้อมข้อโต้แย้งหลังจาก {}.
Daniel Beck

@Daniel ขอบคุณคุณพูดถูก -type f ใช้กับทั้งสองอย่างหากคุณจัดกลุ่มเงื่อนไข ในแง่ของการเคลื่อนย้ายและการโต้แย้งหลาย ๆ ข้อสามารถใช้ได้กับ GNU เท่านั้น find (และ GNU Coreutils mv ) แต่ find … -exec mv -t /mount/drive '{}' \+ ควรทำเคล็ดลับ
slhck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.