ডিরেক্টরি কাঠামোর প্রতিটি ফাইল কেবলমাত্র সেই পথেই অনুলিপি করুন যদি সেখানে ফাইল ইতিমধ্যে উপস্থিত না থাকে


8

ডিরেক্টরি কাঠামো থেকে প্রতিটি ফাইল একটি নির্দিষ্ট ডিরেক্টরিতে অনুলিপি করতে চান কেবল যদি সেখানে ফাইল ইতিমধ্যে উপস্থিত না থাকে।

এই স্ট্যাক ওভারফ্লো প্রশ্ন থেকে প্রথম অংশ পেয়েছেন :

find . -type f -exec cp {} /target-directory \;

ফাইলটি উপস্থিত আছে কি না তা আমি কীভাবে পরীক্ষা করতে পারি? যদি তা না হয় তবে ফাইলটি অনুলিপি করুন, অন্যথায় এড়িয়ে যান।


আপনার অর্থ কি "উত্স গাছের সমস্ত ফাইলকে কোনও উপ-ডিরেক্টরি সহ একটি (নির্দিষ্ট) একক ডিরেক্টরিতে অনুলিপি করবেন"? অথবা "উত্স গাছের সমস্ত ফাইলকে উত্স গাছের অনুরূপ গন্তব্য ডিরেক্টরিটির উপ-ডিরেক্টরিতে অনুলিপি করুন"? আমি প্রথম কেস হিসাবে প্রশ্নটি পড়েছি - আপনি কি স্পষ্ট করে প্রশ্নটি সম্পাদনা করতে পারবেন? (আমি জানি আপনার উত্তর আছে, তবে এটি অন্যদের দ্বারা পড়ে ও ব্যবহার করা হবে))
ভলকার সিগেল

উত্তর:


13

আপনি কমান্ড -uথেকে স্যুইচ ব্যবহার করতে পারেন cp:

SOURCE ফাইলটি কেবল গন্তব্য ফাইলের চেয়ে নতুন বা যখন গন্তব্য ফাইলটি অনুপস্থিত তখন অনুলিপি করুন

বা এর rsyncসাথে কমান্ড ব্যবহার করুন --ignore-existing:

রিসিভারে বিদ্যমান ফাইলগুলি আপডেট করা এড়িয়ে যান

উদাহরণ:

rsync --ignore-existing source/* destination/

3

আপনার মূল কমান্ডটি এ হিসাবে আবারও লেখা যেতে পারে:

find . -type f -exec bash -c 'test -e /target-directory/"$1" || cp "$1" /target-directory' sh {} \;

এখানে মূল কীটি হ'ল আমরা নির্দিষ্ট কমান্ড সহ শেল কল করি এবং যুক্ত ফাইল হিসাবে পাওয়া ফাইলটি পাস করি $1। যদি test -e /target-directory/"$1"ব্যর্থ হয়, তার অর্থ ফাইলটির অস্তিত্ব নেই, cpএক্ষেত্রে ফাইলটি অনুলিপি করবে।

সাধারণভাবে, কেউ অন্য কমান্ড ব্যবহার করতে পারে, যতক্ষণ না কমান্ড কোনও ফাইলের অস্তিত্ব যাচাই করতে পারে। অন্যান্য কিছু বিকল্প:

  • /usr/bin/realpath -e /target-directory/"$1" > /dev/null || cp "$1" /target-directory
  • stat >/dev/null /target-directory/"$1" || cp "$1" /target-directory/"$1"

2
statবাশে ফাইল অস্তিত্বের জন্য পরীক্ষা কেন ? test -eখুব সহজ হবে না ?
ডেভিড ফোস্টার

@ ডেভিডফোরস্টার কোন বিশেষ কারণ নেই। পরীক্ষা কমান্ডও করবে। আমি আমার উত্তরটি পরে সম্পাদনা করব যদি আমি ভুলে না যাই
সের্গেই কোলডিয়াজহনি

0

পড়ুন man cp, এবং --no-clobberবিকল্পটি ব্যবহার করুন cp

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.