ดังนั้นคนใจร้อนใบ้ฉันจึงใช้สคริปต์ต่อไปนี้บนเซิร์ฟเวอร์ 19.04 ของฉันในความพยายามที่จะย้ายไฟล์วิดีโอไปไว้ในโฟลเดอร์ที่มีคำนำหน้า:
dirs=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
shopt -s nocasematch
for file in *
do
for dir in "${dirs[@]}"
do
if [ -d "$file" ]; then
echo 'this is a dir, skipping'
break
else
if [[ $file =~ ^[$dir] ]]; then
echo "----> $file moves into -> $dir <----"
mv "$file" "$dir"
break
fi
fi
done
done
ไม่มีเบาะแสที่ผิดพลาด แต่แทนที่จะย้ายไฟล์ไปยังโฟลเดอร์มันไปที่เอาต์พุตเอกพจน์ .. ดังนั้น:
----> a1.ts moves into -> A <----
----> a2.ts moves into -> A <----
----> a3.ts moves into -> A <----
----> a4.ts moves into -> A <----
----> a5.ts moves into -> A <----
----> c1.ts moves into -> C <----
----> c2.ts moves into -> C <----
----> c3.ts moves into -> C <----
----> c4.ts moves into -> C <----
----> c5.ts moves into -> C <----
ฉันโชคดีที่หยุดกระบวนการ (CTRL + C) ทันทีที่ฉันสังเกตเห็นว่ามันไม่เป็นไปตามที่ตั้งใจไว้และไม่ได้ผ่านทั้งโฟลเดอร์
ดังนั้นตอนนี้ฉันมีไฟล์เหล่านั้นA
แล้วและC
ซึ่งน้อยกว่า Gb และด้วยรูปลักษณ์ของมันคือวิดีโอเดี่ยว
มี 50Gb unaccounted สำหรับในการใช้งานดิสก์ทั้งหมดของโฟลเดอร์ แต่พื้นที่ดิสก์โดยรวมของคอมพิวเตอร์ยังคงเหมือนเดิม ทำให้ฉันคิดว่าไฟล์จะไม่ถูกลบ?
ความช่วยเหลือใด ๆ ชื่นชมขอบคุณ :)
แก้ไข: ไฟล์หายไปจริงเหลือเพียงไฟล์สุดท้ายที่จะเขียนยังคงอยู่ทั้งหมดที่ใช้เวลาพอสมควรสำหรับการใช้ข้อมูลในการอัปเดตดิสก์ .. คุณธรรมของเรื่องราวใช้สคริปต์ของคุณในไฟล์จำลองก่อน!
mv "$file" "$dir/"
กับส่วนท้าย/
; แล้วถ้า$dir
ไม่อยู่mv
จะเกิดข้อผิดพลาดแทนที่จะเปลี่ยนชื่อไป$file
$dir
ยังพิจารณาและmv -i
mv -n
และมักจะทำmkdir -p
ก่อนที่จะย้ายสำหรับวัดดี
A
,B
และอื่น ๆ ที่มีอยู่ก่อนที่จะใช้สคริปต์หรือไม่ ถ้าไม่ใช่คุณเพิ่งเปลี่ยนชื่อไฟล์ ไฟล์ทั้งหมดที่ชื่อขึ้นต้นด้วยa
หรือA
ถูกเปลี่ยนชื่อเป็นA
ดังนั้นไฟล์ที่ถูกเปลี่ยนชื่อล่าสุดเท่านั้นที่รอดชีวิตมาได้ไฟล์อื่น ๆ จะถูกเขียนทับ ในการเรียกตัวแปรdir
ไม่ได้สร้างไดเรกทอรี!