回答:
通常、ファイルを作成または移動するときにプログラムでこれを行いますが、を使用してファイルが作成またはフォルダーに移動されるたびにスクリプトをトリガーすることができますincron
。次のincrontab -e
ような行を使用して、もちろんパスを使用して、タブファイルを設定します。
/path/to/dir0 IN_MOVED_TO,IN_CREATE /path/to/script $@/$#
次に/path/to/script
、簡単な名前変更アクションを記述します。スクリプトは、作成した新しいファイルに対しても呼び出されるため、ファイルに適切な名前が付けられているかどうかをテストする必要があることに注意してください。この例では、ファイルの最後の部分にエポックからの秒数の10桁の数字があるかどうかを確認し、ない場合は追加します。
#!/bin/bash
echo $1 | grep -qx '.*_[0-9]\{10\}' || mv "$1" "$1_$(date +%s)"
編集:これを最初に書いたとき、私は時間に余裕がなかったbash
ので、ここでパターンマッチングを行う方法を理解できませんでした。Gillesは、bashでEREマッチングを使用してgrepを呼び出さずにこれを行う方法を指摘しました。
#!/bin/bash
[[ ! ( $1 =~ _[0-9]{10}$ ) ]] && mv "$1" "$1_$(date +%s)"
inotify
これがこの場合に使用できるツールだと思います。Debianにはinoticoming
、ファイル作成時にアクションを実行するツールがあります。
inoticoming --foreground /path/to/directory mv {} {}-"`date`" \;
{}
ファイル名に置き換えられます。
私が提供したコマンドは完全ではありません-ファイルの名前が変更されると新しいファイルとして認識されるためループが発生しますmv
。これを回避するため--suffix
に、名前を変更する前にファイル内のサフィックスがわかっている場合は、オプションを使用できます。
inoticoming
。好奇心のうち、ときにオーバーこれを使用する方がよいでしょうかinocron
?
inoticoming
は、「に似てincrond
いますが、より軽量で、デフォルトのデーモンとして開始されない」という意見を見つけました。 .. incron
もっと人気があると思うinoticoming
inoticoming
Debianベースのディストリビューションでしか見つかりませんでした(私のGentooにはebuildがありません)。:ページで私は2つのパッケージがあることを掲示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
できますが、X秒while-trueループで実行される永続的なスクリプトは、ファイル書き込みに関するイベント通知を取得し、残りの時間をリソースを無駄にすることなく即座に応答できる場合、間違いなくハックです。