แผ่ไดเรกทอรีที่ซ้อนกัน & ลำดับชั้นของไฟล์จาก Command Line ของ Mac OS X

Anonim

คุณเคยจำเป็นต้องทำให้โครงสร้างไดเร็กทอรีแบนราบ โดยย้ายเนื้อหาไฟล์ทั้งหมดจากโฟลเดอร์ย่อยของไดเร็กทอรีไปยังโฟลเดอร์เดียวหรือไม่? ในขณะที่คุณสามารถทำได้ด้วยตนเองโดยย้ายไฟล์และโฟลเดอร์จากระบบไฟล์ของ Mac OS X หรือ Linux ตัวเลือกที่เร็วกว่าคือการหันไปใช้บรรทัดคำสั่ง บางทีถึงจุดหนึ่งที่คุณสร้างลำดับชั้นที่ซ้อนกันของไดเร็กทอรี ซึ่งตอนนี้คุณต้องเลิกทำโดยการย้ายไฟล์ทั้งหมดออกจากโฟลเดอร์ที่ซ้อนกันเหล่านั้นและกลับเข้าไปในไดเร็กทอรีเดียว หรือบางทีคุณอาจต้องการลดความซับซ้อนของโครงสร้างไดเร็กทอรี ไม่ว่าจะด้วยเหตุผลใดก็ตาม สิ่งนี้ เคล็ดลับทำงานได้ดีทีเดียว

การใช้บรรทัดคำสั่งเพื่อทำให้ไฟล์และโครงสร้างไดเร็กทอรีแบนราบนั้นสงวนไว้สำหรับผู้ใช้ขั้นสูงที่คุ้นเคยกับการใช้เทอร์มินัลโดยทั่วไป หากนั่นไม่ได้อธิบายถึงคุณ ให้ลองดำเนินการด้วยตนเองผ่าน Finder หรือใช้แอพ Mac Automator เพื่อทำงานอัตโนมัติที่คล้ายกันของกิจกรรมระบบไฟล์ อย่างไรก็ตาม เรากำลังมุ่งเน้นไปที่การทำให้ไดเร็กทอรีแบนราบจากบรรทัดคำสั่ง

ตัวอย่างการแฟลตไดเร็กทอรีไฟล์ที่ซ้อนกัน

เพื่อให้เข้าใจสิ่งที่เรากำลังพยายามทำให้สำเร็จได้ดียิ่งขึ้น ลองมาดูตัวอย่างโครงสร้างไดเร็กทอรีในจินตนาการที่เรียกว่า TestDirectory ซึ่งอยู่ในโฟลเดอร์โฮมของผู้ใช้ ในตัวอย่างนี้ TestDirectory มีโฟลเดอร์ย่อย เช่น SubDirectory1, SubDirectory2, SubDirectory3 เป็นต้น โดยแต่ละโฟลเดอร์มีไฟล์ในโฟลเดอร์นั้นๆ สิ่งที่เราต้องทำคือทำให้โครงสร้างไดเร็กทอรีแบนราบ ย้ายไฟล์ทั้งหมดจาก SubDirectory(X) ไปยังไดเร็กทอรีหลัก “TestDirectory”ไดเร็กทอรีเริ่มต้นและเนื้อหาที่แสดงซ้ำกับ the อาจมีลักษณะดังนี้:

$ find ~/TestDirectory/ -type f ~/TestDirectory/rooty.jpg ~/TestDirectory/SampleDirectory1/beta-tool-preview.jpg ~/TestDirectory/SampleDirectory1 /alphabeta-tool.jpg ~/TestDirectory/SampleDirectory2/test-tools.jpg ~/TestDirectory/SampleDirectory3/test-png.jpg ~/TestDirectory/SampleDirectory3/test1.jpg ~/TestDirectory/SampleDirectory3/test2.jpg

หากต้องการแผ่ไดเรกทอรีนี้และเนื้อหาไดเรกทอรีย่อยกลับเข้าไปในโฟลเดอร์ TestDirectory คุณจะต้องใช้สตริงคำสั่งต่อไปนี้:

find TargetDirectory/ -minความลึก 2 -type f -exec mv -i '{}' TargetDirectory/ ';'

หลังจากที่เนื้อหาไดเร็กทอรีถูกแบนแล้ว ควรมีลักษณะดังนี้เมื่อแสดงรายการ:

~/TestDirectory/rooty.jpg ~/TestDirectory/beta-tool-preview.jpg ~/TestDirectory/alphabeta-tool.jpg ~/TestDirectory/test-tools .jpg ~/TestDirectory/test-png.jpg ~/TestDirectory/test1.jpg ~/TestDirectory/test2.jpg

หมายเหตุ ไดเร็กทอรีย่อยจะยังคงอยู่ แต่จะว่างเปล่า เข้าท่า? ถ้าไม่ หรือหากนั่นไม่ได้แสดงถึงสิ่งที่คุณต้องการทำให้สำเร็จ คุณอาจไม่ต้องการทำให้ไดเร็กทอรีแบนราบเลย บางทีคุณอาจต้องการผสานหรือใช้คู่กันเพื่อทำสำเนาที่ซับซ้อนไปยังที่อื่น

การทำให้โครงสร้างไดเร็กทอรีและลำดับชั้นของไฟล์ซ้อนกันโดยใช้ Command Line

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

find -minความลึก 2 -type f -exec mv -i '{}' ';'

แทนที่ด้วยไดเร็กทอรีที่คุณเลือกเพื่อทำให้แบนราบ ตามที่แสดงในตัวอย่างด้านบน

ใช่ ไดเร็กทอรีปรากฏขึ้นสองครั้งในสตริงคำสั่ง ครั้งแรกคือไดเร็กทอรีที่กำลังค้นหาเพื่อรวมไดเร็กทอรีย่อยของ และครั้งที่สองเป็นปลายทางสำหรับรายการที่พบ

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

ตามที่กล่าวไว้ก่อนหน้านี้ คุณสามารถทำได้ใน Finder ของ OS X หรืออย่างน้อยสังเกตการเปลี่ยนแปลงของไฟล์และโฟลเดอร์ใน Finder ตัวเลือก+การคลิกลูกศรเล็กๆ ในมุมมองรายการจะเปิดไดเร็กทอรีย่อยทั้งหมด โดยแสดงลำดับชั้นของโฟลเดอร์ดังนี้:

หลังจากเล่นซอกับทางเลือก bash และ zsh มากมาย เคล็ดลับที่มีประโยชน์นี้ถูกทิ้งไว้โดยผู้แสดงความคิดเห็นบน StackExcange และกลายเป็นวิธีที่ง่ายที่สุดและเข้ากันได้มากที่สุด หากคุณทราบวิธีที่ดีกว่าในการทำให้ไดเร็กทอรีซ้อนกัน โปรดแจ้งให้เราทราบในความคิดเห็น!

แผ่ไดเรกทอรีที่ซ้อนกัน & ลำดับชั้นของไฟล์จาก Command Line ของ Mac OS X