Mix का उपयोग करके यूनिक्स में फ़ोल्डर को कैसे स्थानांतरित करें, केवल जब लक्ष्य एक ही ड्राइव पर हो


10

मुझे यूनिक्स एमवी कमांड का उपयोग करके एक फ़ोल्डर को स्थानांतरित करने की आवश्यकता है, लेकिन केवल अगर लक्ष्य एक ही ड्राइव या समान फाइल सिस्टम में है। सबसे अच्छा तरीका क्या होगा?

linux  bash  shell  unix  mv 

1
ड्राइव यहाँ आप "डिवाइस" मतलब है? इसी तरह हार्डडिस्क?
केंट

एक ही उपकरण, हाँ

जवाबों:


9

दो निर्देशिकाओं या फ़ाइलों को एक ही फाइल सिस्टम ( https://unix.stackexchange.com/ ) से संबंधित कैसे जांचना है इसके आधार पर :

लिनक्स पर एक शेल स्क्रिप्ट में इसे स्टेट के साथ किया जा सकता है :

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बताता है कि यह कभी-कभी मुश्किल होता है, कम से कम सनोस के साथ। लेकिन लिनक्स होने के नाते मुझे उम्मीद है कि यह संगत है। मेरे Ubuntu 12 के साथ यह ठीक है।
फेडोरक्वि

यह %dविभिन्न dirs (समान विभाजन भी) के लिए अलग-अलग मानों के साथ आपके /और/tmp
Kent

2

यह शायद सबसे साफ समाधान नहीं है, लेकिन आप इस तथ्य का उपयोग कर सकते हैं कि हार्ड लिंक को ड्राइव के बीच नहीं बनाया जा सकता है।

ln /path1/file /path2/file 2> /dev/null
if [[ $? == 0 ]]
then
    rm /path1/file
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.