ฉันต้องการตรวจสอบในสคริปต์ทุบตีในสิ่งที่ประเภทระบบแฟ้มไดเรกทอรีเป็น
ความคิดเป็นสิ่งที่ชอบ
if [path] is on a [filesystem] filesystem then
filesystem specific command
end if
ฉันต้องการตรวจสอบในสคริปต์ทุบตีในสิ่งที่ประเภทระบบแฟ้มไดเรกทอรีเป็น
ความคิดเป็นสิ่งที่ชอบ
if [path] is on a [filesystem] filesystem then
filesystem specific command
end if
คำตอบ:
df
ใช้ คุณสามารถผ่านพา ธ และจะให้ข้อมูลระบบไฟล์สำหรับพา ธ นั้น หากคุณต้องการประเภทระบบไฟล์ให้ใช้-T
สวิตช์ดังนี้:
$ df -T test
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda2 ext4 182634676 32337180 141020160 19% /home
ในการแยกประเภทของระบบไฟล์คุณสามารถแยกมันได้ (ใช้-P
สวิตช์เพื่อหลีกเลี่ยงการdf
แตกหักหากส่วนอุปกรณ์ยาวเกินไป):
$ df -PT test | awk 'NR==2 {print $2}'
ext4
ดังนั้นคุณสามารถใช้ค่านั้นในif
โครงสร้างเช่น:
if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
it is an ext4 filesystem
fi
ระวังว่าคอลัมน์อุปกรณ์อาจมีช่องว่าง (แต่หายาก) ซึ่งในกรณีนี้การแยกวิเคราะห์จะล้มเหลว
ในระบบที่ติดตั้งคำสั่ง GNU stat (เช่นเดียวกับลินุกซ์ดิสทริบิวเตอร์มาตรฐานแบบอื่น ๆ ) คุณสามารถรับประเภท fs สำหรับไฟล์ที่กำหนดโดยไม่ต้องแยกวิเคราะห์โดยใช้stat
คำสั่ง:
stat -f -c %T filename
-f
บอกstat
ให้ให้ข้อมูลเกี่ยวกับระบบไฟล์แทนไฟล์และ-c %T
ตั้งค่ารูปแบบเอาต์พุตให้รวมเฉพาะประเภทระบบไฟล์ที่มนุษย์สามารถอ่านได้ ( %T
)
ดังนั้นคุณสามารถใช้ (เป็นทุบตี) เป็น:
if [[ $(stat -f -c %T filename) == ext4 ]]; then
# ext4 specific command
fi
man stat
จะให้ข้อมูลเพิ่มเติม
ด้วยfindmnt
(ส่วนหนึ่งutil-linux
):
findmnt -no fstype -T /path/to/file
เมื่อใช้ตัวเลือก
-T, - เป้าหมายพา ธหากพา ธ ไม่ใช่ไฟล์หรือไดเร็กทอรี mountpoint ให้
findmnt
ตรวจสอบองค์ประกอบพา ธ ในลำดับย้อนกลับเพื่อรับเมานต์ อีกสองตัวเลือกไม่แสดงบรรทัดส่วนหัว: -n, --noheading
และเลือกคอลัมน์ที่จะแสดง:-o, --output
df
จากcoreutils
มีตัวเลือกที่คล้ายกัน--output=
เพื่อพิมพ์เฉพาะบางฟิลด์เช่นfstype
เช่น:
df --output=fstype /path/to/file
ไม่มีตัวเลือกในการลบส่วนหัวออกดังนั้นคุณจะต้องไพพ์เอาต์พุตเช่น | sed 1d
findmnt
เครื่องมือที่น่ารักแม้จะมีเอาต์พุต TUI แบบวาดเส้น ขอบคุณ!