ফাইলগুলিকে একটি নির্দিষ্ট ডিরেক্টরিতে রাখলে স্বয়ংক্রিয়ভাবে নামকরণ করুন


14

কোনও নির্দিষ্ট ডিরেক্টরিতে রাখলে কোনও ফাইলের স্বয়ংক্রিয় নামকরণ কী সম্ভব?

উদাহরণস্বরূপ আমার কাছে "dir0" নামে একটি ডিরেক্টরি রয়েছে I


1
ইনোটাইফাই ( linux.die.net/man/7/inotify ) দেখুন। তবে আপনি এখনই যুক্ত টাইমস্ট্যাম্প সহ সঠিকভাবে নামকরণ করা ফাইলটিতে অনুলিপি করতে পারবেন না?
অ্যালেক্স

উত্তর:


21

সাধারণত আপনি ফাইলটি তৈরি বা সরানোর সময় এই প্রোগ্রামটিমেটিকভাবে করবেন, তবে যখনই কোনও ফাইল তৈরি বা ফোল্ডারে ব্যবহার করে কোনও স্ক্রিপ্ট ট্রিগার করা সম্ভব incronincrontab -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)"

5

আমি মনে করি যে inotifyএই সরঞ্জামটি এই ক্ষেত্রে ব্যবহার করা যাবে। ডেবিয়ানে inoticomingফাইল তৈরিতে ক্রিয়াকলাপ চালানোর সরঞ্জাম রয়েছে :

 inoticoming --foreground /path/to/directory mv {} {}-"`date`" \;

{} ফাইলের নাম দিয়ে প্রতিস্থাপন করা হবে।

আমি যে কমান্ডটি সরবরাহ করেছি তা সম্পূর্ণ নয় - এটি একটি লুপ তৈরি করে কারণ ফাইলটি যখন নতুন নামকরণ করা হবে তখন এটি নতুন হিসাবে স্বীকৃত হবে যাতে এটি mvআবার অ্যাডইগাইন পাবেন । এটি এড়ানোর জন্য আপনি --suffixবিকল্পটি ব্যবহার করতে পারেন যদি আপনি জানেন যে নামকরণের পূর্বে ফাইলটিতে প্রত্যয়টি কী হবে।


সমস্যা নেই. আমি কখনও শুনিনি inoticoming। কৌতূহলের বাইরে এই ওভারটি ব্যবহার করা কখন ভাল হবে inocron?
কালেব

আমি জানি না এটি আরও ভাল কিনা। কিছুক্ষণ আগে আমি এটি সম্পর্কে শুনেছিলাম, কিন্তু আমি এটির চেষ্টা করিনি ... এখন আমি এটির মতামত পেয়েছি inoticomingযা "অনুরূপ incrond, তবে হালকা ওজন এবং একটি ডিফল্ট ডেমন হিসাবে শুরু হয় না", তাই আমি মনে করি এটি কেবল সামান্য ভিন্ন পদ্ধতির সাথে অন্য একটি সমাধান। .. আমি মনে করি incronএটি আরও জনপ্রিয় - inoticoming হোম পেজ এটির জন্য প্যাকেজটি ডেবিয়ানের বাইরে খুঁজে পেতে আমার খুব সমস্যা হচ্ছে ...
pbm

আমি মনে করি আপনি স্রেফ ভুল লিঙ্কটি পোস্ট করেছেন। আমার ডিস্ট্রো এটি কোথাও আছে বলে মনে হয় না।
কালেব

আমি inoticomingকেবলমাত্র দেবিয়ান ভিত্তিক বিতরণগুলিতে পেয়েছি (আমার জেন্টুতে এটির জন্য কোনও বিল্ড নেই)। আমি যে পৃষ্ঠায় পোস্ট করেছি সেখানে দুটি প্যাকেজ রয়েছে: repreproএবং এর নীচে inoticoming...
pbm

2

আপনি ঠিক এর মতো স্ক্রিপ্ট নিতে পারেন এবং এটি চালিয়ে যেতে পারেন ... এটি পাঠক হিসাবে এটি একটি পরিষেবা হিসাবে শুরু করার জন্য অতিরিক্ত বিট যুক্ত করার এবং একাধিক কপি একবারে চালানো প্রতিরোধ করার অনুশীলন হিসাবে ছেড়ে দেব।

#!/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 কিছু করতে পারেন, তবে একটি অবিচ্ছিন্ন স্ক্রিপ্ট যা এক্স-সেকেন্ডের সাথে চালিত হয় যখন সত্য-লুপটি অবশ্যই হ্যাক হয় যখন আপনি ফাইল-লেখাগুলির বিষয়ে ইভেন্টের বিজ্ঞপ্তিগুলি পেতে পারেন এবং বাকি সময়গুলি সম্পদ নষ্ট না করে তাত্ক্ষণিক প্রতিক্রিয়া জানাতে পারেন।
কালেব

@ কালেব - খুব সত্য। শুধু সম্ভাবনা দেওয়া। অবশ্যই, আপনি যদি সিস্টেম নোটিফিকেশনের মাধ্যমে এটি করছেন, আপনার একই ফাইলটি একই সেকেন্ডের মধ্যে দুটি ফাইল তৈরি হওয়ার সম্ভাবনা রয়েছে, সুতরাং সংযুক্ত স্ক্রিপ্টগুলি সেই পরিস্থিতিতে পরিচালনা করতে পারে।
অযৌক্তিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.