এক দিনের চেয়ে নতুন ফাইলগুলি সন্ধান করুন এবং অনুলিপি করুন


12

আমি এমন একটি স্ক্রিপ্টে কাজ করছি যা শেষ দিনটির মধ্যে কেবলমাত্র তৈরি করা ফাইলগুলি অন্য ফোল্ডারে অনুলিপি করবে। আমার যে সমস্যাটি হচ্ছে তা হ'ল স্ক্রিপ্টটি আমি এক দিনেরও কম পুরানো ফাইলগুলির পরিবর্তে উত্স ডিরেক্টরিতে সমস্ত ফাইল অনুলিপি করেছি।

এটি আমার কাছে রয়েছে:

find . -mtime -1 -exec cp --preserve --parents -a "{}" /somefolder \;

উপরের কোডটি উত্স ডিরেক্টরিতে থাকা সমস্ত ফাইলের অনুলিপি করে। আমি যদি 'সিপি' এর জন্য সমস্ত আর্গুমেন্ট অপসারণ করি তবে তা কার্যকর হয়:

find . -mtime -1 -exec cp "{}" /somefolder \;

উপরের কোডটি কেবলমাত্র নতুন ফাইলগুলিকে আমার কপির মতো অনুলিপি করে তবে সিপি আর্গুমেন্টগুলি ব্যবহার করে আমাকে বৈশিষ্ট্যগুলি সংরক্ষণ করতে হবে।

আমি ভেরিয়েবলগুলিও চেষ্টা করেছি এবং লুপগুলি ভাবার জন্য সম্ভবত-এক্সেক বিকল্পটিই সমস্যা ছিল:

files="$(find -mtime -1)"
for file in "$files"
do
cp --parents --preserve -a file /somefolder

তবে একই সমস্যার জন্য লুপের ফলাফলের জন্য উপরের সমস্ত ফাইল অনুলিপি করা হয়েছে। আমি যদি ফাইলগুলি প্রতিধ্বনিত করি তবে কেবলমাত্র আমার প্রয়োজনীয় ফাইলগুলি প্রদর্শিত হবে।

আমি কীভাবে এটি কাজ করতে পারি?


1
ঠিক আছে আমি মনে করি আমার এটি ব্যবহার করে কাজ করছে:find /sourcefolder -type f -mtime -1 -exec cp -a "{}" /somefolder \;
mac1234

এই কাজের জন্য সিপির পরিবর্তে আরএসআইএনসি কি সেরা সরঞ্জাম হতে পারে না? rsync -a উত্স গন্তব্য
ড্যারিল

উত্তর:


9

কিছু বাস্তবায়নের cpএকটি -tবিকল্প রয়েছে, যাতে আপনি ফাইলগুলির আগে লক্ষ্য ডিরেক্টরিটি রাখতে পারেন:

find . -mtime -1 -exec cp -a --parents -t /somefolder "{}" \+

দ্রষ্টব্য যে -aইঙ্গিত দেয় --preserveতাই আমি দ্বিতীয়টি সরিয়েছি।


এটিও পুরানো ফাইলগুলির সাথে ফোল্ডারগুলি অনুলিপি করে ...?
লুইস এ। ফ্লোরিট

3

আপনি এটির paxজন্য এটি ব্যবহার করতে পারেন :

pax -wrT "11$(date +%H%M)," . /destination/folder

কমান্ড-লাইন বিট-বাই-বিট:

  • -wr- যখন paxউভয় -wআচার এবং -rইড অপশন হস্তান্তরিত হয় তখন এটি অনুলিপি করে। সম্ভবত এখানে দরকারী। (তবে উপরের আদেশে অন্তর্ভুক্ত নেই)

    • -lকালি - যা ফাইল-ডেটা অনুলিপি করার পরিবর্তে যদি সম্ভব হয় তবে হার্ড-লিঙ্ক তৈরি করে।

    • -Xpaxএকই উত্স ডিভাইস এবং / অথবা ফাইল সিস্টেমের মধ্যে সীমাবদ্ধতার জন্য।

    • -s/src regex/replace/ - যা স্রোতে ফাইলের নাম পরিবর্তন করে

    • -vএরবোজ - উত্সাহিত / লক্ষ্যযুক্ত ফাইলগুলিতে প্রতিবেদনের জন্য।

  • -T- -Tলক্ষ্য আর্কাইভ জন্য IME বিকল্প নির্বাচন ফাইল (অথবা নিছক যখন সঙ্গে ব্যবহার অনুলিপি করতে -wr) তাদের উপর ভিত্তি করে /modification বা inode /change (অথবা উভয়) বার। এটি আধুনিক সময়ে ডিফল্ট। থেকে ...

ম্যান প্যাক্স

  • ... উভয় ফাইল সময় ব্যবহার করে সময়ের তুলনা কার্যকর হয় যখন প্যাক্স সময় ভিত্তিক বর্ধনশীল সংরক্ষণাগার তৈরি করতে ব্যবহৃত হয় (কেবলমাত্র নির্দিষ্ট সময়সীমার সময় পরিবর্তন করা ফাইলগুলি সংরক্ষণাগারভুক্ত করা হবে)।

  • একটি সময়সীমা ছয়টি পৃথক ক্ষেত্রের সমন্বয়ে গঠিত এবং প্রতিটি ক্ষেত্রে অবশ্যই দুটি সংখ্যা থাকতে হবে। বিন্যাসটি হ'ল:

    [[[[[cc]yy]mm]dd]HH]MM[.SS]

  • ccবছরের প্রথম দুটি সংখ্যা কোথায় (শতাব্দী), বছরের yyশেষ দুটি অঙ্ক, প্রথম mmমাসটি (01 থেকে 12 অবধি), ddমাসের দিন (01 থেকে 31 পর্যন্ত) HHহয়, দিনের ঘন্টা (00 থেকে 23 অবধি), MMমিনিট (00 থেকে 59 পর্যন্ত) হয় এবং SSএটি সেকেন্ড হয় (00 থেকে 59 পর্যন্ত)। মিনিট ক্ষেত্রটি MMপ্রয়োজনীয়, অন্য ক্ষেত্রগুলি alচ্ছিক এবং নিম্নলিখিত ক্রমে যুক্ত করতে হবে:

    HH, dd, mm, yy, cc

  • SSক্ষেত্র অন্যান্য ক্ষেত্রের স্বাধীনভাবে যুক্ত হতে পারে। সময়সীমা বর্তমান সময়ের সাথে তুলনামূলক, তাই ...

    -T 1234/cm

  • ... আজ বা পরে 12:34 অপরাহ্নের পরিবর্তন বা ইনোড পরিবর্তনের সময় সহ সমস্ত ফাইল নির্বাচন করবে।

  • একাধিক -Tসময় পরিসীমা সরবরাহ করা যেতে পারে এবং প্রথম ম্যাচের সাথে চেক করা বন্ধ হয়।

... সুতরাং 11আমার উদাহরণ কমান্ডের আপটি আজকের তুলনায় আপাতত - এটি আজকের তারিখের চেয়ে কম - যা দ্বাদশতম - এবং "$(date)"বাকীটি একটি কমা দ্বারা অনুসরণ করা কেবল একটি মান বিন্যাস format

... বাদে - এবং উল্লেখযোগ্য মূল্যবান - আমি লক্ষ্য ডিরেক্টরিটির জন্য একটি নিখুঁত পাথ ব্যবহার করি - এবং আপনি যদি এটি করেন তবে আপনারও উচিত। ডক্সগুলি আপেক্ষিক টার্গেট পাথগুলির জন্য সমস্ত অনির্দিষ্ট আচরণের উল্লেখ করে - এবং আমি যখন প্রথমবারের মতো ব্যবহার করার চেষ্টা paxকরেছি তখন আমি এক ঘন্টার জন্য বিস্ময়ে এক শ্বাস নেওয়ার শপথ নিচ্ছিলাম যতক্ষণ না আমি একটি পরম পথ ব্যবহার করি।


2

সহায়তার জন্য সবাইকে ধন্যবাদ জানায়, আপনার পরামর্শের সংমিশ্রণটি ব্যবহার করে এটি কাজ করে:

নীচের কোডটি দিয়ে গেছে এবং এটি পুরোপুরি কাজ করে।

find /sourcefolder -type f -mtime -1 -exec cp -a "{}" /somefolder \;

আবার ধন্যবাদ!


2

আমি ঠিক একই কার্যকারিতাটি করছিলাম তবে ফোল্ডারের কাঠামো সংরক্ষণের প্রয়োজন ছিল। তাই আমি যা করেছি তা কিছুটা আলাদা।

cd sourcedir
find . -type f -mtime -$days -print0 | tar -czvf ${tarpath}/testtar.tar.gz --null -T -

যেখানে $ দিনগুলি দিনের সংখ্যা $ এই ফাইলগুলি সংরক্ষণ করার জন্য তারপথ অস্থায়ী পথ। এবং যখন আমি পুনরুদ্ধার করতে চেয়েছিলাম।

cd $destdir
tar -xvzf ${tarpath}/testtar.tar.gz

এটা আমার জন্য কৌতুক করেছে।

দ্রষ্টব্য: ব্যাকআপ নেওয়ার সময় আপনি যদি কিছু ফোল্ডার বাদ দিতে চান তবে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন

find . -type f -mtime -$days ! -path '*/FolderToavoidSearch/*' -print0 | tar -czvf ${tarpath}/testtar.tar.gz --null -T -

সুবিধা: 1. আমি সর্বদা সংক্ষেপিত বিন্যাসে যা পুনরুদ্ধার করেছি তার একটি অনুলিপি আমার কাছে ছিল।

  1. পুনরুদ্ধারের মাঝখানে আমার একটি বিরতি রয়েছে যেখানে আমি যেতে পারি এবং সেই ফাইলগুলি কী কী তা পরীক্ষা করতে পারি এবং যদি ঠিক আছে তবে স্ক্রিপ্টটি নিয়ে এগিয়ে যেতে হবে।

  2. এটি ফোল্ডার কাঠামো সংরক্ষণ করে তাই এটি উত্স ডিরেক্টরি থেকে গন্তব্য ডিরেক্টরিতে পরিবর্তিত ফাইলগুলি ওভাররাইট করে

দ্রষ্টব্য: অন্যদিকে প্রয়োজনীয়তা সীমিত না হলে আমি আরএসসিএনসি ব্যবহার করব

rsync -avz --exclude 'FolderToavoidSearch' --backup --backup-dir="/backup/dir/test/backup_$(date +\%Y-\%m-\%d)" /source/dir/ /dest/dir/

তারিখ rsyc জন্য আরো এখানে


1

নির্দিষ্ট কিছু দিন ফিরে যাওয়া ব্যতীত অন্য কোনও সঠিক তারিখ এবং সময়ও চয়ন করতে পারে

(আপনার ফাইলের নামগুলিতে কোনও স্থান, ট্যাব বা ওয়াইল্ডকার্ড না থাকলে কেবল এটি কার্যকরভাবে কাজ করবে)

cp `find . -type f -newermt '17 dec 2016 20:10:00'` FOLDER

উপরে ডিরেক্টরিতে থাকা সমস্ত ফাইল যা 17 ডিসেম্বর 2016 20:10:00 পরে ফোল্ডারে (আজকের 1 দিন আগে :) তৈরি করা হয়েছে অনুলিপি করে

সন্ধানের কমান্ডের প্রতীকটি সম্পর্কে সতর্কতা অবলম্বন করুন, এটি এটি নয়: 'এটি এটি, একটি ব্যাকটিক: selection তারিখ নির্বাচন এটির সাথে:'

তাদের নামে স্পেস, ট্যাব, নিউলাইন বা ওয়াইল্ডকার্ডযুক্ত ফাইলগুলির জন্য, আপনি স্টাফেন চাজেলাসের যে কোনও সমাধান ব্যবহার করতে পারেন, প্রথমটি জিএনইউর জন্য, দ্বিতীয়টি জিএনইউ বা কিছু বিএসডি-র জন্য:

find . -type f -newermt '17 dec 2016 20:10:00' -exec cp -t FOLDER {} + 
find . -type f -newermt '17 dec 2016 20:10:00' -exec sh -c 'cp "$@" FOLDER' sh {} +


ধন্যবাদ স্টিফেন, এ কারণেই আমি কোনও পোস্টে এটি খুঁজে পেলাম না, যদিও আমার ক্ষেত্রে এটি মনোযোগের মতো কাজ করেছিল। আপনি যখন এটি করেন কেবল এটি সন্ধান করুন। -type f-newwermt '17 ডিসেম্বর 2016 20:10:00 '
ফাতেহসারিগল

... এটি সেই সময়ের পরে তৈরি ফাইলগুলি মুদ্রণ করে, আমি নিশ্চিত না যে এটি কী ধরণের সমস্যা হতে পারে। তারপরে আমি অনুলিপি করতে এই ফাইলগুলি নির্বাচন করতে কেবল ব্যাকটিক্স ব্যবহার করি। চিয়ার্স
ফাতেহসারিগল

আমি বিশ্বাস করি আপনার ভাগ করা পোস্টটি "লুপিং ওভার" সম্পর্কে, আমার কোডটি কি ফলাফলের ফলাফলকে ছাড়িয়ে যাবে? বা এটি কেবল অনুলিপি দ্বারা ব্যবহারের ফলাফলগুলি নির্বাচন করছে? (3 টি মন্তব্যের জন্য দুঃখিত, আমি এখনও আমার মন্তব্যগুলি সম্পাদনা করার অনুমতি পাচ্ছি না
ফাতেহসারিগল

1
ব্যবহার find . -type f -newermt '17 dec 2016 20:10:00' -exec cp -t FOLDER {} +(জিএনইউ) বা find . -type f -newermt '17 dec 2016 20:10:00' -exec sh -c 'cp "$@" FOLDER' sh {} +(জিএনইউ বা কিছু বিএসডি (সীমাবদ্ধ ফ্যাক্টর রিট পোর্টাবিলিটিটি -newermtএখানে প্রাক্কলিত))।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.