ফোল্ডারে ফাইলের মেয়াদ শেষ করুন: x দিন পরে ফাইলগুলি মুছুন


12

আমি উইন্ডোজ শেয়ারড ড্রাইভে একটি "ড্রপ ফোল্ডার" তৈরি করতে চাই যা সবার কাছে অ্যাক্সেসযোগ্য। আমি চাই যে ফাইলগুলি যদি তারা X দিনের বেশি ফোল্ডারে বসে থাকে তবে স্বয়ংক্রিয়ভাবে মুছে ফেলা হবে।

তবে, এটি করার মতো সমস্ত পদ্ধতির মতো বলে মনে হচ্ছে, শেষ পরিবর্তিত তারিখ, শেষ অ্যাক্সেসের সময় বা কোনও ফাইল তৈরির তারিখটি ব্যবহার করুন।

আমি এটিকে এমন একটি ফোল্ডার তৈরি করার চেষ্টা করছি যা ব্যবহারকারীর কারও সাথে ভাগ করে নেওয়ার জন্য ফাইলগুলি ফেলে দিতে পারে। যদি কেউ এখানে ফাইলগুলি অনুলিপি করে বা সরাতে থাকে তবে আমি ঘড়িটি এই মুহুর্তে টিক দিয়ে শুরু করা উচিত। তবে, ফাইলের পরিবর্তিত তারিখ এবং তৈরির তারিখ আপডেট হবে না যতক্ষণ না কেউ প্রকৃতপক্ষে ফাইলটি সংশোধন করে। শেষ অ্যাক্সেসের সময়টি খুব ঘন ঘন আপডেট করা হয় ... মনে হয় উইন্ডোজ এক্সপ্লোরারে কেবল একটি ডিরেক্টরি খোলার ফলে সর্বশেষ অ্যাক্সেসের সময় আপডেট হবে।

কেউ এর সমাধান কি জানেন? আমি ভাবছি যে দৈনিক ভিত্তিতে ফাইলগুলির হ্যাশ তালিকাভুক্ত করা এবং তারপরে একটি নির্দিষ্ট তারিখের চেয়ে পুরানো হ্যাশের উপর ভিত্তি করে ফাইলগুলির মেয়াদ শেষ হওয়া সমাধান হতে পারে .... তবে ফাইলগুলির হ্যাশ নেওয়া সময় সাপেক্ষ হতে পারে।

কোন ধারনা ব্যাপকভাবে প্রশংসা হবে!

দ্রষ্টব্য:
আমি ইতিমধ্যে এখানে বেশ কয়েকটি উত্তর দেখেছি ... ফাইল সার্ভার রিসোর্স মনিটর, পাওয়ারশেল স্ক্রিপ্টস, ব্যাচ স্ক্রিপ্টস ইত্যাদির দিকে নজর রেখেছি তারা এখনও সর্বশেষ অ্যাক্সেস সময়, সর্বশেষ পরিবর্তিত সময় বা তৈরির সময় ব্যবহার করে ... যা বর্ণিত হিসাবে উল্লিখিত প্রয়োজনীয়তার সাথে খাপ খায় না।


একটি প্রশ্ন, @ মিচেল কেজরলিং দ্বারা উল্লিখিত হিসাবে, বক্সে ফেলে দেওয়ার পরে ফাইলটি সংশোধন করা হলে টাইমার গণনা বন্ধ করে দেয়?
গেট-হোম বাইফাইওলক্লক

আপনি যা সন্ধান করছেন তা হ'ল উইন্ডোজ সমতুল্য tmpwatch
অ্যাভেরি পেইন

উত্তর:


5

আমরা পাওয়ারশেল স্ক্রিপ্ট এবং নীতিমালার সংমিশ্রণ ব্যবহার করেছি। নীতিটি নির্দিষ্ট করে যে ব্যবহারকারীকে অবশ্যই ড্রপ_জোন ভাগ করার মধ্যে একটি ফোল্ডার তৈরি করতে হবে এবং তারপরে যে ফাইলে তারা চান সেগুলি ফোল্ডারে অনুলিপি করতে হবে। যখন ফোল্ডারটি 7 দিনের পুরানো হয়ে যাবে (ক্রিয়েশনটাইম ব্যবহার করে) পাওয়ারশেল স্ক্রিপ্টটি এটি মুছে ফেলবে।

আমি পাওয়ারশেল স্ক্রিপ্টে কিছু লগিং যুক্ত করেছি যাতে এটির অপারেশনটি যাচাই করতে পারি এবং কেবল নিজের থেকে সম্পূর্ণ অকার্যকর সংরক্ষণের জন্য ছায়ার অনুলিপিগুলি চালু করতে পারি।

সমস্ত লগিং স্টাফ ছাড়াই এখানে স্ক্রিপ্ট।

$location = Get-ChildItem \\foo.bar\Drop_Zone
$date = Get-Date
foreach ($item in $location) {
  # Check to see if this is the readme folder
  if($item.PsIsContainer -and $item.Name -ne '_ReadMe') {
    $itemAge = ((Get-Date) - $item.CreationTime).Days
    if($itemAge -gt 7) {
      Remove-Item $item.FullName -recurse -force
    }
  }
  else {
  # must be a file
  # you can check age and delete based on that or just delete regardless
  # because they didn't follow the policy
  }
}

1
এটি সবচেয়ে সহজ বলে মনে হচ্ছে, ফাইলের ডেটটাইম স্ট্যাম্প, বিকল্প ডেটা স্ট্রিমগুলির সাথে ঝাঁকুনি দেয় না বা ফাইলগুলির তালিকা এবং তাদের ড্রপের তারিখের প্রয়োজন হয় না। আমি একটি দুর্দান্ত স্ক্রিপ্ট তৈরি করতে যাচ্ছিলাম যা সমস্ত ধরণের যাদু করেছিল তবে আমি এটি দেখেছি।
বিউভুলফনড 42

এবং স্ক্রিপ্টটি সারাক্ষণ চালিত করার জন্য কোনও ফাইল সিস্টেম ঘড়ির ইভেন্টের প্রয়োজন হয় না, কারণ এটি প্রতিদিন একবার চালানো যেতে পারে, এবং কোনও কারণেই কোনও দিন মিস করা থাকলে তা এতটা গুরুত্বপূর্ণ নয়।
বেওলফনডোড 42

2
@ BeowulfNode42 ঠিক যেমন নির্দেশ করেছেন ঠিক তেমন দুর্দান্ত ধারণা। ব্যবহারকারীদের অবশ্যই একটি ফোল্ডার তৈরি করতে হবে তা নিশ্চিত করার জন্য, "এই ফাইলগুলি কেবলমাত্র" এই ফাইলগুলিতে ফাইল তৈরি / লেখার ডেটা তৈরি করুন "এসিএল এর একটি সাধারণ" অস্বীকার করুন "তা নিশ্চিত করবে যে ব্যবহারকারীরাও সাবফোল্ডারগুলি তৈরি করতে হবে।
ব্রেট জি

3

আপনি যদি এনটিএফএস ধরে নিতে পারেন তবে আপনি ফাইলের বিকল্প প্রবাহে একটি কী (গাইড) লিখতে পারেন। তারিখটি প্লাস করুন, তাই আপনি মূলত ফাইলগুলিতে ডাটাবেস সংরক্ষণ করতে পারেন।

আরও তথ্য পাওয়া যাবে

http://blogs.technet.com/b/askcore/archive/2013/03/24/alternate-data-streams-in-ntfs.aspx

মূলত আপনি একটি পৃথক স্ট্রিমে অতিরিক্ত সামগ্রী সংরক্ষণ করতে পারেন যা একটি বিশেষ নাম দ্বারা কোড করা হয়েছে od


কেউ কিভাবে এটি করবে?
ব্রেট জি

@ ব্রেটজি ডকুমেন্টেশনে লিঙ্ক যুক্ত করেছে। "এনটিএফএস বিকল্প ডেটা স্ট্রিম" আপনাকে গুগলে খুব সন্ধান করিয়ে দিত, কেবল যদি - আপনি গুগল জানেন না।
টমটম

দুঃখিত, আমি জানি বিকল্প ডেটা স্ট্রিমগুলি কী, আমি এই প্রসঙ্গে তাদের ব্যবহার বোঝার চেষ্টা করছিলাম। সুতরাং আপনি হ্যাশ বা কিছু ব্যবহার না করে বলছেন, ফাইলগুলি ট্র্যাক করতে বিকল্প ডেটা স্ট্রিমে একটি জিইউডি (এবং / অথবা তারিখ) ব্যবহার করুন .. আহা।
ব্রেট জি

হ্যাঁ। যদি আপনি কোনও ফাইলকে বিশ্বাসযোগ্যভাবে চিহ্নিত করতে পারেন - আপনি এটিতে চিহ্নিতকরণের তারিখটিও রাখতে পারেন - তবে আপনাকে হ্যাশ গণনা করার দরকার নেই।
টমটম

স্টোরের বাইরে কোনও ফাইল অনুলিপি করা হয়েছে, সম্পাদিত হয়েছে এবং তারপরে আবার অনুলিপি করা হয়েছে কিনা তা দেখুন। আপনি তখন টাইমারটি পুনরায় চালু করতে চান, যার জন্য একটি হ্যাশ কার্যকর হতে পারে।
একটি সিভিএন

2

আপনি IO.FileSystemWatcher ব্যবহার করতে পারেন, যা আপনাকে নতুন ফাইল তৈরির জন্য একটি ফোল্ডার "দেখার" অনুমতি দেয়। এই কাজটি করার জন্য আপনার যে টুকরোগুলির প্রয়োজন হবে তা এখানে।

এই ভেরিয়েবলগুলি দেখার জন্য পাথ এবং কোন ফাইলগুলি ট্র্যাক করতে হবে তা সূক্ষ্ম-সুরের জন্য একটি ফিল্টার কনফিগার করে:

$watchFolderPath = $env:USERPROFILE
$watchFolderFilter = "*.*"

এটি ফোল্ডারটি দেখার জন্য পরামিতিগুলি এবং ইভেন্টটি ঘটতে শুরু করার জন্য ক্রিয়াগুলি সেট আপ করে। মূলত এটি প্রতিটি ফাইলে লাস্ট রাইটটাইমটি যেমন লেখা হয় তেমন পুনরায় সেট করে:

$watcher = New-Object IO.FileSystemWatcher $watchFolderPath, $watchFolderFilter -Property @{
    IncludeSubdirectories = $true
    NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
    }
$onCreated = Register-ObjectEvent $watcher Created -SourceIdentifier FileCreated -Action {
    $FileName = $Event.SourceEventArgs.FullPath
    $file = Get-Item $FileName
    $file.LastWriteTime = Get-Date
    }

এটি ব্যবহারের প্রয়োজন হলে ইভেন্টটি নিবন্ধভুক্ত হতে পারে:

Unregister-Event -SourceIdentifier FileCreated

শেষ অবধি, পুরানো ফাইলগুলি পরিষ্কার করার জন্য আপনি এটি একবারে চালাতে পারেন:

Get-ChildItem $watchFolderPath -Recurse | Where-Object {((Get-Date)-$_.LastWriteTime).TotalDays -gt 6} | Remove-Item

আপনার যা প্রয়োজন তা হ'ল ...


ফাইলটি তৈরি হওয়ার পরে লাস্ট রাইটটাইম অ্যাট্রিবিউট সেট করতে এটি সম্পাদনা করে এবং পরে ফাইলগুলি মুছতে এটি ব্যবহার করুন।
টিম ফেরিল

1

এটি কিছুক্ষণ হয়ে গেছে তবে আমি এটিকে মোকাবেলার জন্য তুলনামূলকভাবে সোজা ফরোয়ার্ড পদ্ধতিটি সেট আপ করেছি।

আমি ড্রপ ডিরেক্টরিতে যুক্ত হওয়া যে কোনও ফাইলগুলিকে স্পর্শ করব (কোনও উত্স নিরীক্ষণ ইউটিলিটির মাধ্যমে পর্যবেক্ষণ করা) এবং ফোল্ডারে যুক্ত তারিখের সর্বশেষ পরিবর্তিত তারিখটি সেট করব।

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


নিখুঁত ধারণা। আমি আমার নিজস্ব গবেষণা করব .. কিন্তু কোন ধারণা আপনি কোন রিসোর্স মনিটরিং ইউটিলিটি ব্যবহার করেছেন?
ব্রেট জি

@ ব্রেটজি সত্যি বলতে এটি প্রায় 10 বছর আগে ছিল। মনে নেই। আপনি আমাকে বুড়ো বানাচ্ছেন। :) যদি আমি আজ এটি করতাম তবে আমি ইভেন্ট দর্শকের ফাইল সিস্টেম অডিটিং ইভেন্টের উপর ভিত্তি করে একটি কাজ সম্পাদন করব। ফাইলসিস্টেমওয়াটার .NET অবজেক্ট পাওয়ারশেলের মাধ্যমে উপলব্ধ বলে মনে করি। এটি অন্য বিকল্প হবে।
টিম ব্রিগহাম

হা, আমি বুঝতে পারি নি যে আপনি বোঝাতে চেয়েছিলেন যখন আপনি "কিছুক্ষণ" বলেছিলেন। হ্যাঁ যথেষ্ট মজার আমি কেবল ফাইলসিস্টেমওয়াটারের দিকে চেয়েছিলাম। যদিও, আমি মনে করি না এটি সরানো / অনুলিপি করা ফাইলগুলির সাথে কাজ করবে। উত্তরের জন্য ধন্যবাদ!
ব্রেট জি

1
@ ব্র্যাটজি - ফাইলসীমওয়াতচারটি একটি ট্র্যাকিং টেবিলের সাথে ব্যবহার করা যেতে পারে তবে এর নিজস্ব সমস্যা রয়েছে। এখানে দেখুন: stackoverflow.com/questions/1764809/... stackoverflow.com/questions/6000856/filesystemwatcher-issues
JohnP

1
@ ব্র্যাটজি - এছাড়াও, এফএসডাব্লু
আর্টিকেলস

1

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

লোকেরা আপলোডের পরে ফাইলগুলি সংশোধন করতে না পারার বিষয়ে যদি আপনি ঠিক থাকেন তবে আপনার কাছে পৃথক আপলোড এবং অ্যাক্সেস ফোল্ডার এবং একটি স্ক্রিপ্ট থাকতে পারে যা তাদের মধ্যে ফাইলগুলি সরিয়ে নিয়ে যায় এবং তাদের পুনরায় তারিখ করে। তবে মনে হচ্ছে আপনি লোকেরা ফাইলগুলি সরাসরি সংশোধন করতে সক্ষম হন।

সুতরাং একটি সহজ, যদি কিছুটা হ্যাকি হয় তবে সমাধানগুলি তারিখগুলি নিয়ে গণ্ডগোল হবে। আমি দুটি স্ক্রিপ্ট লিখব:

আওয়ারলি ডেট চেঞ্জার স্ক্রিপ্ট

আপনার পছন্দের ভাষায় এক ঘন্টা বা তার চেয়ে একবার স্ক্রিপ্ট চালাতে হবে:

  • গত 20 বছরের মধ্যে কোনও তারিখ সংশোধিত তারিখ সহ কোনও ফাইল সন্ধান করে।
  • যখন এটি কোনও ফাইল সন্ধান করে, তার তারিখটি আজকে বিয়োগ 20 বছর পরিবর্তিত করা হবে।

পাওয়ারশেলের ক্ষেত্রে এটি দেখতে এমন কিছু দেখাচ্ছে:

$path = "D:\test"

$today = Get-Date
$before = $today.AddDays(-7300) #356*20 days

Get-ChildItem -Recurse -Path $path | foreach {
    if ($_.LastWriteTime -gt $before) {
        Write-Host $_.Name
        $_.LastWriteTime = $before
    }
}

আজ (27 শে মে) এই স্ক্রিপ্টটি চালানো, 1 ফেব্রুয়ারী 1994 এ সমস্ত ফাইলের পরিবর্তিত তারিখ নির্ধারণ করে - ঠিক 356 * 20 দিন আগে। যেহেতু এটি কেবল আগের মানের চেয়ে নতুন ফাইলগুলিকে পরিবর্তন করছে, এটি ইতিমধ্যে অতীতে সেট করা ফাইলগুলিকে স্পর্শ করবে না।

ক্লিনআপ স্ক্রিপ্ট

ক্লিনআপ স্ক্রিপ্টটি প্রতি রাতে চলত এবং:

  • "20 বছর এবং X দিন আগে" সংশোধিত তারিখ সহ ফাইলগুলি অনুসন্ধান করুন
  • এগুলি মুছুন

আমি এই অংশটির জন্য স্ক্রিপ্ট লিখব না - প্রচুর পরিমাণে ইউটিলিটি রয়েছে যা নির্দিষ্ট তারিখের চেয়ে পুরানো ফাইলগুলি মুছতে সক্ষম করতে পারে, আপনার পছন্দমতো পছন্দ করুন। গুরুত্বপূর্ণ অংশটি হ'ল 00৩০০ + এক্স দিনের পুরানো ফাইলগুলি সন্ধান করা, যেখানে শেষবার সংশোধিত হওয়ার পরে X এগুলি রাখতে চান সেই সংখ্যা।

সুবিধাদি

এখানে অন্যান্য উত্তরের তুলনায় এর কয়েকটি সুবিধা রয়েছে:

  • কেউ যদি ফাইলটি পরিবর্তন করে তবে টাইমারটি পুনরায় সেট হবে।
  • ফাইলগুলি চিহ্নিত করার জন্য এনটিএফএস বিকল্প স্ট্রিমগুলির প্রয়োজন নেই (যা ফাইলটি সরানোর সময় সংরক্ষণ করা হয়, ফলে কোনও পরিবর্তিত ফাইলের অকাল মুছে ফেলা হতে পারে)
  • কোনও কার্যকারিতা প্রভাবিত হলে ন্যূনতম হওয়া উচিত। কোনও ডাটাবেস বা ফাইলের নাম এবং / অথবা হ্যাশগুলির তালিকা রাখার দরকার নেই।
  • স্ক্রিপ্টগুলি চলতে ব্যর্থ হলে কিছুই ভয়াবহভাবে ভেঙে যায় না। তারিখটি আপডেট করার জন্য কোনও পরিষেবা বা ক্রমাগত চলমান প্রোগ্রাম নেই। মাত্র দু'জন নির্ধারিত কাজ। সমাধানগুলি যেগুলি নতুন ফাইলগুলি দেখার এবং তাদের শেষ পরিবর্তিত সময়টি এখনই আপডেট করার উপর নির্ভর করে যদি পরিষেবাটি ব্যর্থ হয় বা কোনও রেসের শর্তে চলে যায় তবে নতুন ফাইলগুলি মুছতে পারে।

আমি কেবল দেখতে পাচ্ছি সমস্যাটি যদি লোকেরা 20 বছর আগে ড্রপ ফোল্ডারে সর্বশেষ পরিবর্তিত একটি ফাইল অনুলিপি করে। আমি বেশিরভাগ পরিস্থিতিতে মনে করি, এটির বেশিরভাগ ইস্যু হওয়ার সম্ভাবনা কম তবে এটি উঠে আসতে পারে।


0

আপনি একটি ওয়েব পৃষ্ঠার মাধ্যমে ড্রপ বাক্সে ফাইলগুলি যুক্ত করার আনুষ্ঠানিক রূপ নিতে পারেন, যার একটি "আপলোড" আইএফআরএম রয়েছে। ব্যবহারকারী তখন ফাইলটি "পোস্ট" করতে পারে, যা সার্ভারে পিএইচপি / এএসপি জব শুরু করে, যা ফাইলটি নিয়ে যায় এবং এটি পিকার স্থানে রাখে। পিএইচপি / এএসপি সংখ্যার সূচক / বিশ্লেষণ অপারেশন করতে পারে।


0

যদি কেউ এখানে ফাইলগুলি অনুলিপি করে বা সরাতে থাকে তবে আমি ঘড়িটি এই মুহুর্তে টিক দিয়ে শুরু করা উচিত। তবে, ফাইলের পরিবর্তিত তারিখ এবং তৈরির তারিখ আপডেট হবে না যতক্ষণ না কেউ প্রকৃতপক্ষে ফাইলটি সংশোধন করে।

আমি এমন একটি স্ক্রিপ্ট তৈরি করব যা প্রতি পাঁচ মিনিটে নির্ধারিত কাজ হিসাবে চলে এবং দুটি কাজ করে।

  1. প্রথম ক্রিয়াটি ফোল্ডারে অনুলিপি করা কোনও ফাইলের একটি অনুলিপি তৈরি করবে, ফাইলটিতে একটি উপসর্গ রেখে আসলটি মুছবে। এটি নিশ্চিত করবে যে ফাইলটি তৈরির তারিখটি আবেদনের জন্য অভিন্ন ছিল।
  2. দ্বিতীয় ক্রিয়াটি পূর্ব নির্ধারিত উপসর্গ (অ্যাকশন 1 এর সাথে সেট) সহ সমস্ত ফাইলের দিকে নজর দেবে এবং এক্স দিনের চেয়ে পুরানো সৃষ্টির তারিখযুক্ত যেকোনোটিকে মুছে ফেলবে। এটি পরিবর্তন / অ্যাক্সেস করা তারিখের সমস্যা সমাধান করবে।

0

ফাইলগুলি চিহ্নিত করার জন্য একটি বিদ্যমান ব্যবস্থা আছে, সংরক্ষণাগার বিট। এটি ডস-এর প্রথম দিন থেকেই রয়েছে এবং এফএটি এবং এনটিএফএস উভয়তেই উপস্থিত রয়েছে।

মূলত, প্রতিটি ফাইলের এটি সংরক্ষণাগার বিট পূর্বনির্ধারিতভাবে সেট করে। আপনি যদি আপনার ড্রপ ফোল্ডারে আর্কাইভ বিট সহ কোনও ফাইল দেখেন , (1) সেই বিটটি সাফ করুন এবং (2) এর তারিখটি আজ সেট করুন। আপনি যদি কোনও বিট ছাড়াই এবং অতীতে <= 7 দিন তারিখ সহ কোনও ফাইল দেখেন তবে এটি মুছুন।

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

আপনি এখন নিরাপদে ফাইলসিস্টেমওয়াটার ব্যবহার করতে পারেন। এতে যে কোনও সমস্যা রয়েছে (যেমন ডুপ্লিকেট ইভেন্টগুলি, বাফার ওভারফ্লো বিস্তৃত তথ্য হারিয়েছে) প্রাসঙ্গিক তথ্য সমস্ত ফাইল মেটাডাটাতে হওয়ায় আর গুরুত্বপূর্ণ বিষয় নয়।

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