ডিরেক্টরি কাঠামো সংরক্ষণ করে কীভাবে আমি ফাইলগুলি পুনরায় বিস্তৃত করে অনুলিপি করে অনুলিপি করতে পারি?


71

লিনাক্স কমান্ড লাইনে, আমি একটি (খুব বড়) .txtফাইলের সেটটি একটি ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে (এবং এর উপ-ডিরেক্টরিগুলি) অনুলিপি করতে চাই ।

অটুট থাকতে আমার ডিরেক্টরি কাঠামো প্রয়োজন এবং শেষ হওয়াগুলি বাদে আমার ফাইলগুলি উপেক্ষা করতে হবে .txt


2
আপনার প্রশ্নে সিপি থাকা এবং ট্যাগ হিসাবে সন্ধান করা, এর অর্থ কি এই বিকল্পগুলির সাথে আপনি বেঁধেছেন? যেহেতু আপনার ডেটাসেটটি খুব বড়, তাই অনুলিপি করার প্রক্রিয়াটি কোনও কারণে বাধাগ্রস্ত হতে পারে এবং এটি আপনাকে পুনরায় আরম্ভ করতে হবে তা অনুধাবন করে। আমি নিশ্চিত না যে সন্ধান / সিপি পদ্ধতির স্থানান্তরটি পুনরায় শুরু করতে সক্ষম হবে এবং কেবল অনুপস্থিত অংশটি অনুলিপি করতে সক্ষম হবে। আপনি যদি / সিপি সন্ধানের সাথে আবদ্ধ না হন তবে আপনি আরএসসিএনকে বিবেচনা করতে পারেন, যা স্মার্ট। এর - এক্সক্লুড অপশনটি আপনাকে .txt ফাইলগুলি এড়িয়ে যেতে অনুমতি দেবে।
ভেষ্ট

ফেয়ার কল - আরএসসিএনসি সম্ভবত আরও ভাল বিকল্প। সন্ধান / সিপি বাঁধা নেই। (আমি যেভাবেই এগুলি ব্যবহার করেছি - রিসোট মেশিনে আরএসসিএন ইনস্টল করা হয়নি, এটি একটি লাইভ ওয়েব সার্ভার ছিল এবং আমি যতটা সম্ভব
পাদদেশের

উত্তর:


95

আপনি ব্যবহার করতে পারেন খোঁজ এবং cpio এই কাজ করতে

cd /top/level/to/copy
find . -name '*.txt' | cpio -pdm /path/to/destdir

(-updm for overwrite destination content.)

আমি কেন? আমি ভেবেছিলাম ফাইলটি পরিবর্তনের তারিখ ঠিক রাখছি।
মুবাশার

7
cd /source/path
find -type f -name \*.txt -exec install -D {} /dest/path/{} \;

আপনি একটি .পরে অনুপস্থিত find। এছাড়াও ম্যাকোস 10.13.1 এ, এটি কাজ করেছে:find . -type f -name "*.txt" -exec install -v {} /dest/path/{} \;
গুরুতর

2

অন্য পদ্ধতির

find . -name '*.txt' -exec rsync -R {} path/to/dext \;


আমি এই সমাধানটি পছন্দ করি। আমি find . -iname '*.txt' -exec rsync -Rptgon {} path/to/dext \;একটি কেস সংবেদনশীল ম্যাচ করতাম এবং মালিকানা এবং অনুমতিগুলি সংরক্ষণ করতাম ।
মাউন্টেনএক্স

1

আমার পক্ষে সবচেয়ে সহজ উপায়:

cp --parents -R jobs/**/*.xml ./backup/

একটি ক্যাচ হ'ল "প্যারেন্ট পথ" সঠিক হওয়ার আগে আপনাকে "কাঙ্ক্ষিত" ডিরেক্টরিতে যেতে হবে।

এছাড়াও আপনি নিশ্চিত হন যে আপনি বাশ এ পুনরাবৃত্ত গ্লোব সক্ষম করেছেন:

shopt -s globstar

1

আপনি কীভাবে প্রথমে এটি দিয়ে অনুলিপি করেন

cp -r /old/folder /new/folder

তারপরে নতুন ফোল্ডারে যান এবং চালান

find . -type f ! -iname "*.txt" -delete

বা শুধু

cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete

সম্পাদনা: ঠিক আছে আপনি একটি কমান্ড চান যা ফিল্টার করে (আমি এটি পরীক্ষা করিনি কারণ আমার সিস্টেমে cpioকমান্ড নেই!)। এখানে আমি এটি খুঁজে পেয়েছি: http://www.gnu.org/software/findutils/manual/html_mono/find.html# কপি করা- এ- সাবসেট- অফ- ফাইলস

find . -name "*.txt" -print0 |
     cpio -pmd0 /dest-dir

দয়া করে প্রথমে এটি পরীক্ষা করুন , কারণ আমি এখনও চেষ্টা করে দেখিনি। যদি কেউ যাচাই করে তবে এটি দুর্দান্ত।


নডস চিয়ার্স - এটি কাজ করবে, কিন্তু .txt এ ফিল্টার না করেই আমি কয়েক মিলিয়ন ফাইলের দিকে তাকিয়ে আছি (কয়েকশ জিবি থেকে বেরিয়ে আসছে)। প্রয়োজনে আমার থাকতে পারে তবে সম্ভব হলে অনুলিপি করার সময় আমি ফিল্টার করতে পছন্দ করব
দাবীবিহীন ব্যাগ

1
চিয়ার্স, সম্পাদিত সংস্করণ কাজ করে যদি আমি '0' -pmd0 থেকে অপসারণ
unclaimedbaggage

আপনি রাখা উচিত 0মধ্যে -pmd0যোগ -print0শেষে findকমান্ড (ঠিক আগে |)।
জি ম্যান

1

আমি ম্যাকোজে একই জিনিসটি করার চেষ্টা করছিলাম, তবে বিকল্পগুলির মধ্যে আমার পক্ষে সত্যিই কোনও কাজ হয়নি। যতক্ষণ না আমি আবিষ্কার করেছি ditto

আমাকে অনেক .wav ফাইলগুলি অনুলিপি করতে হয়েছিল, এবং এটি ভিডিও ফাইলগুলি এড়িয়ে চলেছিল ... তাই আমি এখানে এলাম:

find . -type f -iname "*.wav" -ls -exec ditto {} /destination/folder/{} \;

  • find .- বর্তমান ফোল্ডারে চালায়। cd /source/folderআপনি শুরু করার আগে নিশ্চিত হন

  • -type f - কেবলমাত্র ফাইল অনুসন্ধান করার জন্য নির্দিষ্ট করে

  • -iname "*.wav" - এটি এটিকে কে সংবেদনশীল * .wav সন্ধান করতে বলে
  • -ls- এটি আপনাকে যে ফাইলটিতে কাজ করছে তা দেখায়। অন্যভাবে এটি কিছুই দেখায় না।
  • -exec ditto {} /destination/folder/{} \; - একই ডিরেক্টরি গাছের সাথে ফাইলগুলি অনুলিপি করা ও তৈরি করার সমস্ত কাজ করে।

0

ডিরেক্টরিতে নেভিগেট করুন:

find . -regex '<regexp_to_get_directories_and_files_you_want>' | xargs -i cp -r --parents {} path/to/destination

আপনি যদি নিয়মিত এক্সপ্রেশন পরিচালনা করেন তবে এটি কিছুটা সোজা এগিয়ে এবং শক্তিশালী sa


-1

ডিরেক্টরিতে নেভিগেট করুন:

cp '*.css' /path/to/destination

আপনাকে ডিরেক্টরিতে প্রতিটি ফোল্ডারে নেভিগেট করতে হবে, তবে আমি এখন পর্যন্ত দেখেছি বেশিরভাগ বিকল্পের চেয়ে এটি ভাল।


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