คำตอบ:
ขึ้นอยู่กับวิธีการตรวจสอบว่าสองไดเรกทอรีหรือไฟล์เป็นของระบบไฟล์เดียวกัน ( https://unix.stackexchange.com/ ):
ในเชลล์สคริปต์บน Linux สามารถทำได้ด้วยstat :
stat -c "%d" /path # returns the decimal device number
คุณสามารถ:
file1=$(stat -c "%d" /path/file1)
file2=$(stat -c "%d" /path/file2)
แล้วเปรียบเทียบ
คุณสามารถเขียนดังนี้:
if [ $(stat -c "%d" /path/file1) -eq $(stat -c "%d" /path/file1) ]
then
# mv sentence
fi
ตัวเลือกอื่น ๆ นำมาจากคำถาม Stackexchange ด้วย :
if [[ $(df -P /path/file1 | tail -1) = $(df -P /path/file2 | tail -1) ]]
then
# echo "same filesystem"
# mv sentence
fi
$(...)
`...`
ภายหลังถูกคัดค้านในอดีต
stat
บอกฉันว่าบางครั้งก็เป็นเรื่องยากอย่างน้อยกับ SunOS แต่การเป็น Linux ฉันหวังว่ามันเข้ากันได้ ด้วย Ubuntu 12 ของฉันมันใช้ได้
%d
ผลลัพธ์นี้ให้ค่าที่แตกต่างกันสำหรับ dirs ที่แตกต่างกัน (พาร์ติชันเดียวกัน) ลองกับคุณ/
และ/tmp
นี่อาจไม่ใช่วิธีที่สะอาดที่สุด แต่คุณสามารถใช้ข้อเท็จจริงที่ว่าฮาร์ดลิงก์ไม่สามารถสร้างขึ้นระหว่างไดรฟ์ได้
ln /path1/file /path2/file 2> /dev/null
if [[ $? == 0 ]]
then
rm /path1/file
fi