সিএলআই ব্যবহার করে ফাইলগুলিকে তারিখের সাথে বিভিন্ন ডিরেক্টরিতে সরান


9

আমার একটি পুরানো হার্ড ড্রাইভ থেকে প্রচুর ছবি রয়েছে যা আমি সাজানোর চেষ্টা করছি। আমি যদি চালনা ls -lকরি তবে আমি লক্ষ্য করেছি যে এই সমস্ত ফাইলের তৈরি তারিখটি 2012 বা তার আগেও রয়েছে। আদর্শভাবে, আমি এগুলি আমার কম্পিউটারের দ্বিতীয় হার্ড ড্রাইভে সরাতে চাই, যা স্বয়ংক্রিয়ভাবে মাউন্ট করার জন্য সেট করা নেই। সাধারণত, আমি কিছু কমান্ড একসাথে লিঙ্কযুক্ত ব্যাচ হিসাবে এটি করতে পেরেছি। এ পর্যন্ত, আমি আছে ls -l | grep -i 2012যার দ্বারা প্রদত্ত তারিখের মধ্যে 2012 একমাত্র ফাইল খুঁজে spits ls -l। এখন, কৌতুকটি এই cpসমস্ত ফাইলকে নতুন ডিরেক্টরিতে যুক্ত করবে। আমি নিশ্চিত নই যে এর সাথে আর কোথায় যাব কারণ প্রতিটি ফাইলের অনুলিপি করতে হবে। আমার পরবর্তী কমান্ডগুলি কী হবে?

উত্তর:


13

ব্যবহার করবেন না ls। এ জাতীয় ক্ষেত্রে ব্যবহার করার পরামর্শ দেওয়া হয় না। grepতিথি অনুসারে ফিল্টার করতে ব্যবহার করা ভাল ধারণা নয়। আপনার ফাইলনেমে নিজেই 2012স্ট্রিং থাকতে পারে যদিও এটি 2012 সালে সংশোধন করা হয়নি।

ব্যবহারের findকমান্ড নল তার আউটপুট।

find . -newermt 20120101 -not -newermt 20130101 -print0 | xargs -0 cp -t /your/target/directory 

এখানে,

-newermt 20120101  ==>  File's modified date should be newer than 01 Jan 2012
-not               ==>  reverses the following condition. Hence file should be older than 01 Jan 2013
-print0 and -0     ==>  Use this options so that the command doesn't fail when filenames contain spaces 

1
`-Exec এমভি {} / আপনার / লক্ষ্য / ডিরেক্টরি \; পরিবর্তে '-প্রিন্ট 0 | xargs -0 cp -t / আপনার / লক্ষ্য / ডিরেক্টরি 'নামের ফাঁকা জায়গাগুলির সমস্যা সম্পর্কে ঠিক ততটাই ভাল কাজ করে? (এছাড়াও, ওপি অনুলিপি না করে চলাচল করতে চেয়েছিল )
হ্যাগেন ভন ইটজেন

^^ হ্যাঁ উভয়ই একই উদ্দেশ্য অর্জন করে।
শিবামস

4

আপনার যদি পুরানো ডিস্কে নতুন ফাইল থাকে যা আপনি এড়াতে চান তা আমি এগুলি নিয়েই যেতে চাই

  1. সংশোধিত-তারিখের সাথে একটি অস্থায়ী মার্কার ফাইল তৈরি করুন যা আমি চাই না এমন ফাইলগুলি থেকে আমার চাওয়া ফাইলগুলি পৃথক করে
  2. চিহ্নিতকারী ফাইলের চেয়ে পুরানো ফাইলগুলি নতুন জায়গায় কপি করুন

এখানে এই জন্য নমুনা কমান্ড, যা অনুমান আপনি নতুন পুরনো ডিস্ক থেকে কোনো ডিরেক্টরি অনুক্রমের বজায় রাখতে চান (হয় cpioএকটি কপি কমান্ড অনুরূপ হয় tarবা pax):

touch -t 201201010000 /tmp/marker    # YYYYMMDDhhmm == Jan 1st, 2012
cd /path/to/old/disk
find . -type f \! -newer /tmp/marker -print0 | cpio -pmd0 /path/to/new/disk

2

আমি মনে করি সম্ভবত এই সমস্যাটি আপনার মত একই, আপনি এটিও পরীক্ষা করে দেখতে পারেন: উপ-ডিরেক্টরি তৈরি করুন এবং তারিখ অনুসারে ফাইলগুলি সংগঠিত করুন

আমি এই সমস্যাটির প্রথম উত্তরের উপর ভিত্তি করে এই নতুন লিপিটি লিখছি:

for x in *; do
  d=$(date -r "$x" +%Y)
  mkdir -p "/your/new/directory/$d"
  mv -- "$x" "/your/new/directory/$d/"
done
  1. copy.shআপনার পুরানো ডিরেক্টরিতে নামক কোনও ফাইলটিতে এই স্ক্রিপ্টটি লিখুন ।

  2. /your/new/directoryআপনার নতুন ডিরেক্টরি এর পথ সঙ্গে প্রতিস্থাপন

  3. এই ফাইলটির সাথে এক্সিকিউটেবল করুন chmod +x copy.sh

  4. তারপরে এই ফাইলটি কার্যকর করুন ./copy.sh


1
আপনি কিছু ব্যতিক্রম হ্যান্ডলিং যোগ করার জন্য, যাতে স্ক্রিপ্ট না সরানো চাইতে পারেন নিজেই একটি মধ্যে 2015ডিরেক্টরি।
জি-ম্যান

1

আপনার সম্ভবত ব্যাচের ক্রিয়াকলাপের জন্য ব্যাচের সরঞ্জাম ব্যবহার করা উচিত। এটি করার ফলে সাধারণত সমস্ত রেকর্ডগুলি একক স্ট্রিমে পড়া / লেখার পরিবর্তে অন্তর্ভুক্ত থাকে, উদাহরণস্বরূপ, cpঅনুলিপি করা প্রতিটি ফাইলের জন্য পৃথক প্রক্রিয়া শুরু করা।

এখানে ইতিমধ্যে একটি cpioউত্তর লেখা আছে, যা ইতিমধ্যে প্রদত্ত কেবলমাত্র বিকল্পগুলি দেওয়া আপনি সম্ভবত আমি যা পছন্দ করব তা সম্ভবত। যাইহোক, ফর্ম্যাটটি তার উত্তীর্ণ হওয়ার পর থেকে মানকযুক্ত সংরক্ষণাগার বিন্যাসে আবার cpioউন্নত করা হয়েছে এবং এতে ভাঁজ করা paxহয়েছে। একই সত্য tar

একটি কঠোরভাবে পজিক্স- paxসম্ভবত ফাইল পরিবর্তন সময়ের উপর ভিত্তি করে সংরক্ষণাগার সদস্যদের সরাসরি ফিল্টারিংয়ের জন্য কোনও বিকল্প সরবরাহ করবে না - যদিও মানটি %Tতালিকা-মোড ফর্ম্যাট-সংশোধক নির্দিষ্ট করে । তবুও, paxআমি জানি যে সবচেয়ে সাধারণভাবে পাওয়া যায় - যা মীরাবিলোস দ্বারা পরিচালিত বিএসডি সংস্করণ - এটি সরাসরি অ্যাক্সেসযোগ্য সিএলআই-স্যুইচটিতে প্রসারিত করে।

উদাহরণস্বরূপ, গাছ এ রুট একমাত্র সব ফাইল কপি করার ./সর্বশেষ সংশোধিত হয়েছে যা আগে ccyymmddHHMMথেকে /target/dirআপনাকে যা করতে পারে:

pax -rwT,201301010000 ./ /target/dir

শিশু ডিরেক্টরিতে পুনরাবৃত্তি এড়াতে আপনি পরিবর্তে এটি করতে পারেন:

pax -rwdT,201301010000 ./* /target/dir

আরও জন্য manপৃষ্ঠা দেখুন।


আমি অনুমান করি আমার সত্যিকারের শেখা উচিত pax, তবে tarএবং cpioএখনও আমাকে ভাল করে দাঁড়ান। +1
রোয়াইমা

@ রোয়াইমা - কঠোরভাবে বলতে গেলে, সেখানে একটি প্রকৃত paxসংরক্ষণাগার ফর্ম্যাট রয়েছে (যা ustસ્ટার ফর্ম্যাটের জন্য একটি এক্সটেনশন ) , পসিক্স-স্পেশাল pax ইউটিলিটি সিপিও , প্যাক্স এবং ustস্টার ফর্ম্যাটগুলি পড়তে / লেখায়। যেহেতু তিনটি সংরক্ষণাগার ধরণের পরিমাণগুলি মূলত অনেকগুলি ফাইলের জন্য মেটাডেটা এনকোডিংয়ের বিভিন্ন উপায়ে, ফাইলগুলির আসল ডেটা একক স্ট্রিমের মধ্যে বলে, এটি সত্যিকারের খুব বেশি কিছু নয়। আমি একবার লিখেছিলাম shitar- যা কেবলমাত্র কয়েক লাইন শেল-স্ক্রিপ্টের জন্য ছিল - বেশিরভাগই dd- tarপসিক্স স্পেকের ভিত্তিতে ফ্লাইতে আইএনএন ব্লক ডেভস।
মাইকজার্ভ

আমি আপনার লিঙ্ক লিপি পছন্দ করি; আশ্চর্যজনকভাবে ঠিক একই উদ্দেশ্যে বেশ কয়েক মাস আগে এটি খুব কার্যকর হত। আচ্ছা ভালো. আমি এমনকি ব্যবহার বন্ধ করার চেষ্টা করতে পারি cpio -H ustar...
রোয়াইমা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.