แผ่ไดเรกทอรีที่ซ้อนกัน & ลำดับชั้นของไฟล์จาก Command Line ของ Mac OS X
คุณเคยจำเป็นต้องทำให้โครงสร้างไดเร็กทอรีแบนราบ โดยย้ายเนื้อหาไฟล์ทั้งหมดจากโฟลเดอร์ย่อยของไดเร็กทอรีไปยังโฟลเดอร์เดียวหรือไม่? ในขณะที่คุณสามารถทำได้ด้วยตนเองโดยย้ายไฟล์และโฟลเดอร์จากระบบไฟล์ของ 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 และกลายเป็นวิธีที่ง่ายที่สุดและเข้ากันได้มากที่สุด หากคุณทราบวิธีที่ดีกว่าในการทำให้ไดเร็กทอรีซ้อนกัน โปรดแจ้งให้เราทราบในความคิดเห็น!