এমভি ব্যবহার করে ইউনিক্সে ফোল্ডার কীভাবে সরানো যায়, কেবল তখনই যখন লক্ষ্য একই ড্রাইভে থাকে


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

অন্য বিকল্প। স্ট্যাকেক্সচেঞ্জ প্রশ্ন থেকে নেওয়া :

if [[ $(df -P /path/file1 | tail -1) = $(df -P /path/file2 | tail -1) ]]
then
    # echo "same filesystem"
    # mv sentence
fi

আপনি কি মনে করেন এটি লিনাক্স বিতরণ জুড়ে সামঞ্জস্যপূর্ণ?

কেবল আরও ভাল অনুশীলন ছড়িয়ে দেওয়ার জন্য, $(...)পরিবর্তে ব্যবহার করুন `...`। পরবর্তীটি পূর্বের পক্ষে অবমূল্যায়ন করা হয়।
শাহবাজ

ধন্যবাদ @ শাহবাজ, আপনার সুপারিশ সহ এটি সম্পাদনা!
ফেডোরকিউ

@ জ্যাপ্প আমি জানি না, এটি পরীক্ষা করা উচিত। আমার অভিজ্ঞতা statআমাকে বলে যে এটি কখনও কখনও কৌশলযুক্ত, কমপক্ষে সানোএসের সাথে। তবে লিনাক্স হওয়ায় আশা করি এটি সামঞ্জস্যপূর্ণ। আমার উবুন্টু 12 এর সাথে এটি ঠিক আছে।
ফেডোরকিউ

এটি %dবিভিন্ন ডায়ারের জন্য আলাদা মানগুলি দেয় (একই বিভাজন এমনকি) আপনার /এবং/tmp
কেন্ট

2

এটি সম্ভবত সবচেয়ে পরিষ্কার সমাধান নয়, তবে আপনি এই সত্যটি ব্যবহার করতে পারেন যে ড্রাইভের মধ্যে হার্ড লিঙ্ক তৈরি করা যায় না।

ln /path1/file /path2/file 2> /dev/null
if [[ $? == 0 ]]
then
    rm /path1/file
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.