একটি ফাইল সরান এবং পিছনে একটি নরম লিঙ্ক ছেড়ে


10

আমি একটি একক লিনাক্স কমান্ড সন্ধান করছি যা আমাকে এর সমতুল্য করতে সহায়তা করে:

cp /some/path/file /another/path/ && ln -sf /another/path/file /some/path/

যদি একটি না থাকে, তবে গুচ্ছ ফাইলগুলির জন্য এটি করার সর্বোত্তম উপায় কী?


আমি এটিকে লেখার পক্ষে বাশ স্ক্রিপ্টিংটি খুব ভাল জানি না, তবে আমার সমাধানটি হ'ল কেবল একটি স্ক্রিপ্ট লিখতে হবে এবং একে সিপিএলএন
Unkwntech

1
সিপি এমভি হওয়া উচিত নয়?
বার্ট ভ্যান হিউকেলোম

L-to -f বিকল্পটি এটির যত্ন নেয়।
innaM

1
এটি 10 ​​জিবি ফাইল
হাইয়ালকি

2
@HelloGoodbye আপনি বিভ্রান্ত করছেন &&সঙ্গে &। যেমন লেখা আছে, লাইনটি সিপির রিটার্ন মানটি পরীক্ষা করে এবং এটি সফল হলে কেবল দ্বিতীয় অংশটি চালায়।
itadok

উত্তর:


7

একটি ছোট্ট নোট, আপনি যে কমান্ডটি ডেটা না সরানোর জন্য উভয় বার ln ব্যবহার করতে পারেন (ধরে নিলেন উভয় পাথ একই ফাইল সিস্টেমে রয়েছে)।

ln /some/path/file /another/path/ && ln -sf /another/path/file /some/path/

তবে আমি ধরে নিয়েছি যে আপনি / কিছু / পথ / এর বিষয়বস্তু অন্য ডিস্কে স্থানান্তর করতে চান এবং তারপরে নতুন ফাইলগুলির লিঙ্ক তৈরি করতে যাতে "কেউ" খেয়াল করেন না।

for f in `ls /some/path/`; do ln /some/path/$f /another/path/ && ln -sf /another/path/$f /some/path; done

এটি একটি ব্যাশ ফাংশনে মোড়ানো:

function cpln {
    for f in `ls $1`
    do
        ln $1/$f $2 && ln -sf $2/$f $1
    done
}

আমি যা চালাচ্ছি তা যদি কোনও ডিরেক্টরি হয়ে যায় তবে এই কাজ করার কোনও উপায় আছে কি?
tladuke

এটি কীভাবে আসল ফাইলটিকে ডিস্কে স্থানান্তরিত করে?
ইব্রাহিম

ইব্রাহিম: ডেটা সরে না, এটি কেবল ডিরেক্টরিতে পয়েন্টার আপডেট করে।
মিঃ শার্ক

tladuke: হ্যাঁ এবং না। যেহেতু ডিরেক্টরিটি ডিস্কে অনেক চতুর, তাই এলএন ট্রিকের কোনও প্রয়োজন নেই (যা পরিচালকগুলির জন্য কাজ করে না), কেবল একটি এমভি করুন :-) করুন
মিঃ শার্ক

2

আপনি ব্যবহার করতে পারেন আমার স্ক্রিপ্ট থেরেস (দুটি পরামিতি / কিছু / পথ / ফাইল এবং / অন্য / পথ /) নেয়:

#!/bin/bash
cp $1 $2
if [ "$?" -ne "0" ]; then
    echo "Some error"
    exit 1
    fi
ln -sf $2/${1##*/} ${1%/*}

স্ট্রিং ম্যানিপুলেশনগুলির সাথে দুর্দান্ত কৌশল, এর আগে কখনও দেখেনি। ধন্যবাদ!
itadok

1

গুরুতরভাবে, আমি ভেবেছিলাম এটি সত্যিই একটি সহজ প্রশ্ন।

পার্লে আমি কী করতে পারি তা এখানে:

#!/bin/perl
# Usage: cpln TARGETDIR SOURCE...
# Example: find tree/ -type f | xargs cpln commands/

$target = shift;

foreach(@ARGV) {
    m[(.*)/([^/]+)];
    system("cp $_ $target");
    system("ln -sf $target/$2 $1/");
}

আমি আরও মার্জিত কিছু জন্য আশা ছিল, কিন্তু আমার ধারণা আমি এটি ব্যবহার করব।


1
এটি "পার্লে" করতে, আপনার ফাইল :: অনুলিপি (বা অনুরূপ) এবং সিমলিংক () ব্যবহার করা উচিত। পার্ল শেল নয়; সিস্টেম এড়িয়ে চলুন (), এবং বিশেষত সিস্টেমে পুরো কমান্ড লাইনগুলি () যুক্ত করা এড়িয়ে চলুন (উদাহরণস্বরূপ, যদি কোনও যুক্তিতে কোনও স্থান থাকে?) যে কোনও উপায়ে, সর্বদা, সর্বদা, সর্বদা মূল্য ফেরতের মানগুলি পরীক্ষা করে।
জন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.