พาร์ติชันไดเรกทอรีเป็นไดเรกทอรีย่อยตามชื่อไดเรกทอรี


2

พื้นหลัง: เว็บไซต์ของลูกค้าจัดเก็บรูปโปรไฟล์ผู้ใช้และไฟล์แนบอื่น ๆ ไว้ในโฟลเดอร์/user/images/*user_id*เดียว พวกเขาเพิ่งถึงขีด จำกัด ไดเรกทอรี ( echo */ | wcechoes 31998, ระบบไฟล์ ext3) ดังนั้นฉันต้องแยกพวกเขาออกเป็นชิ้นเล็ก ๆ

โฟลเดอร์ผู้ใช้ใน/user/imagesนั้นขึ้นอยู่กับ ID ผู้ใช้ที่เก็บไว้ในฐานข้อมูล มีไดเรกทอรีที่ไม่ใช้หมายเลขสองสามตัวที่จะไม่สนใจ

ฉันสร้างสคริปต์ทุบตีเล็ก ๆ ซึ่งทำงานได้ดีในสภาพแวดล้อมการทดสอบของฉัน แต่ฉันต้องการที่จะมีความคิดเห็นของคุณเกี่ยวกับเรื่องนี้:

#!/usr/bin/env bash

for D in *; do
    if [ -d "${D}" ]; then # check if it's a directory

        echo "Directory: ${D}"

        if [ "${D}" -eq "${D}" ] 2>/dev/null # check if directory is a valid integer / number based
        then
            pre=${D:0:1} # $pre = first letter of the directory name
            echo "Subdir: ${pre}"

            if [[ ! -d "${pre}" ]] # check if directory $pre exists
            then
                mkdir "${pre}" # directory $pre does not exist, create it
                echo "Created subdir ${pre}..."
            fi

            mv "${D}" "${pre}" # move $d into $pre
            echo "Moved ${D} into ${pre}..."

        else
            echo "Directory: ${D} is not number based, i.e. not based on a user id. Skipping..."
        fi
    fi
done

ฉันยินดีรับข้อเสนอแนะหรือเคล็ดลับการเพิ่มประสิทธิภาพก่อนที่จะเรียกใช้บนเซิร์ฟเวอร์

คำตอบ:


0

คุณสามารถใช้mkdir -pเพื่อหลีกเลี่ยงการตรวจสอบว่ามีไดเรกทอรีอยู่หรือไม่เว้นแต่คุณต้องการCreated subdir ${pre}ข้อความจริงๆ

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

นอกจากนี้การใช้-nสวิตช์mvอาจช่วยป้องกันการสูญหายของข้อมูลโดยไม่ได้ตั้งใจ

หนึ่งความคิดล่าสุด - การขยายตัวของดาวแทนอาจเกินความยาวสูงสุดของ bash line หากเป็นกรณีนี้คุณอาจใช้ท่อส่งออกls -1เป็นวงวนตามเวลาที่อ่านบรรทัดอินพุตทีละบรรทัด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.