কোনও নির্দিষ্ট ডিরেক্টরিতে রাখলে কোনও ফাইলের স্বয়ংক্রিয় নামকরণ কী সম্ভব?
উদাহরণস্বরূপ আমার কাছে "dir0" নামে একটি ডিরেক্টরি রয়েছে I
কোনও নির্দিষ্ট ডিরেক্টরিতে রাখলে কোনও ফাইলের স্বয়ংক্রিয় নামকরণ কী সম্ভব?
উদাহরণস্বরূপ আমার কাছে "dir0" নামে একটি ডিরেক্টরি রয়েছে I
উত্তর:
সাধারণত আপনি ফাইলটি তৈরি বা সরানোর সময় এই প্রোগ্রামটিমেটিকভাবে করবেন, তবে যখনই কোনও ফাইল তৈরি বা ফোল্ডারে ব্যবহার করে কোনও স্ক্রিপ্ট ট্রিগার করা সম্ভব incron। incrontab -eএই জাতীয় লাইনের সাহায্যে আপনার ট্যাব ফাইলটি সেট আপ করুন তবে অবশ্যই আপনার পথগুলি সহ:
/path/to/dir0 IN_MOVED_TO,IN_CREATE /path/to/script $@/$#
তারপরে /path/to/scriptএকটি দ্রুত নামকরণের ক্রিয়া লিখুন। সচেতন থাকুন যে স্ক্রিপ্টটি আপনার তৈরি করা নতুন ফাইলটির জন্যও ডাকবে, সুতরাং ফাইলটি ইতিমধ্যে যথাযথভাবে নামকরণ করা হয়েছে কি না তা পরীক্ষা করে দেখতে হবে। এই উদাহরণে এটি পরীক্ষা করে যাচাই করে যে ফাইলটির পর্ব থেকে সেকেন্ডের জন্য ফাইলের নামের শেষ অংশ হিসাবে দশ-অঙ্কের নম্বর রয়েছে এবং যদি এটি না হয় তবে এটি এতে যুক্ত করে:
#!/bin/bash
echo $1 | grep -qx '.*_[0-9]\{10\}' || mv "$1" "$1_$(date +%s)"
সম্পাদনা: আমি যখন এটি প্রথম লিখেছিলাম আমি সময়মতো স্বল্প ছিলাম এবং কীভাবে bashএখানে প্যাটার্নটি মিলে যায় তা বুঝতে পারি না। গিলস ব্যাশে ইআর ম্যাচ ব্যবহার করে গ্রেপ না করে কীভাবে এটি করবেন তা নির্দেশ করেছিলেন :
#!/bin/bash
[[ ! ( $1 =~ _[0-9]{10}$ ) ]] && mv "$1" "$1_$(date +%s)"
আমি মনে করি যে inotifyএই সরঞ্জামটি এই ক্ষেত্রে ব্যবহার করা যাবে। ডেবিয়ানে inoticomingফাইল তৈরিতে ক্রিয়াকলাপ চালানোর সরঞ্জাম রয়েছে :
inoticoming --foreground /path/to/directory mv {} {}-"`date`" \;
{} ফাইলের নাম দিয়ে প্রতিস্থাপন করা হবে।
আমি যে কমান্ডটি সরবরাহ করেছি তা সম্পূর্ণ নয় - এটি একটি লুপ তৈরি করে কারণ ফাইলটি যখন নতুন নামকরণ করা হবে তখন এটি নতুন হিসাবে স্বীকৃত হবে যাতে এটি mvআবার অ্যাডইগাইন পাবেন । এটি এড়ানোর জন্য আপনি --suffixবিকল্পটি ব্যবহার করতে পারেন যদি আপনি জানেন যে নামকরণের পূর্বে ফাইলটিতে প্রত্যয়টি কী হবে।
inoticoming। কৌতূহলের বাইরে এই ওভারটি ব্যবহার করা কখন ভাল হবে inocron?
inoticomingযা "অনুরূপ incrond, তবে হালকা ওজন এবং একটি ডিফল্ট ডেমন হিসাবে শুরু হয় না", তাই আমি মনে করি এটি কেবল সামান্য ভিন্ন পদ্ধতির সাথে অন্য একটি সমাধান। .. আমি মনে করি incronএটি আরও জনপ্রিয় - inoticoming হোম পেজ এটির জন্য প্যাকেজটি ডেবিয়ানের বাইরে খুঁজে পেতে আমার খুব সমস্যা হচ্ছে ...
inoticomingকেবলমাত্র দেবিয়ান ভিত্তিক বিতরণগুলিতে পেয়েছি (আমার জেন্টুতে এটির জন্য কোনও বিল্ড নেই)। আমি যে পৃষ্ঠায় পোস্ট করেছি সেখানে দুটি প্যাকেজ রয়েছে: repreproএবং এর নীচে inoticoming...
আপনি ঠিক এর মতো স্ক্রিপ্ট নিতে পারেন এবং এটি চালিয়ে যেতে পারেন ... এটি পাঠক হিসাবে এটি একটি পরিষেবা হিসাবে শুরু করার জন্য অতিরিক্ত বিট যুক্ত করার এবং একাধিক কপি একবারে চালানো প্রতিরোধ করার অনুশীলন হিসাবে ছেড়ে দেব।
#!/usr/bin/perl
use strict;
use warnings;
use File::Slurp;
use POSIX qw(strftime);
chdir($ENV{STAMP_DIR} || '/home/me/dir0')
or die "Cannot get to stamp dir: $!\n";
while (1) {
my $stamp = strftime("_%Y%m%d%H%M%S", localtime);
for my $orig ( grep { $_ !~ /_\d{14}$/ } read_dir('.') ) {
rename $orig, "$orig$stamp"
or warn "Failed to rename $orig to $orig$stamp: $!\n";
}
sleep($ENV{STAMP_DELAY} || 10);
}
এবং এটি এখানে কাজ করছে:
$ STAMP_DIR=/home/me/stamps STAMP_DELAY=1 ./t.pl &
[1] 6989
$ cd stamps/
$ ls
$ touch hello
$ ls
hello_20110704033253
$ touch world
$ ls
hello_20110704033253
world_20110704033258
$ touch hello
$ ls
hello_20110704033253
hello_20110704033302
world_20110704033258
perl কিছু করতে পারেন, তবে একটি অবিচ্ছিন্ন স্ক্রিপ্ট যা এক্স-সেকেন্ডের সাথে চালিত হয় যখন সত্য-লুপটি অবশ্যই হ্যাক হয় যখন আপনি ফাইল-লেখাগুলির বিষয়ে ইভেন্টের বিজ্ঞপ্তিগুলি পেতে পারেন এবং বাকি সময়গুলি সম্পদ নষ্ট না করে তাত্ক্ষণিক প্রতিক্রিয়া জানাতে পারেন।