2016-04-04 1 views
2

量子化学プログラムを実行するときにいくつかの問題に対処する必要があります。このプログラムは実行中は2つの重要なファイルを作成するようですが、使用後には直接削除します。これらのファイルは、これをサポートするために重要です。しかし、彼らはあまりにも速く削除され、私は手でそれらをコピーすることはできません。特殊ファイルのディレクトリを常にスキャンして出現時に保存する

これらのファイルを保存する必要があることをプログラムに伝える方法がないように思われるので、私はこれらのファイルの作業ディレクトリを常にスキャンする小さなスクリプトについて考えていました。それらが作成されると、そのプログラムを別のディレクトリにコピーするか、別のファイル名にコピーするようにします。

私がこの質問にしたタグにもかかわらず、 "CentOS release 6.3(Final)"にアクセスできるプログラミング言語 - 特別な権利のない通常のユーザーはOKです。


私はfind -name ...をcontaints whileループによってこれを行うと、ファイルのコピー/発見された場合にはエコーを考えていました。しかし、このアプローチは私にとっては馬鹿だと思っています。

保存したいファイルは、filename.gcp.in.tmpfilename.gcp.out.tmpです。

+0

「永続的」とは「常時」という意味ですか? – khelwood

+0

@khelwood確かに...申し訳ありません。 –

答えて

3

一時ファイルを取得するための便利なトリックは、それらにハードリンクを作成することです。これは、一時ファイルの大きさに関係なく、ファイルが完成する前にコピーして内容の一部を失う危険性がないため、コピーよりもうまく機能します。一時ファイルを作成したプログラムがそれを削除すると、ハードリンクが残ってしまいます。

あなたは事前に、一時ファイルの名前を知らない、とあなたはinotifyを使用することはできません、それを行うための一つの可能​​な方法は、ファイルが作成されたディレクトリにこのポーリングループを実行する場合:

while : ; do 
    for tmpfile in *.gcp.in.tmp *.gcp.out.tmp ; do 
     [[ -e $tmpfile ]] || continue 
     backupfile=$tmpfile.bak 
     [[ -e $backupfile ]] || ln -- "$tmpfile" "$backupfile" 
    done 
done 

ファイル名を事前に知っていて、それらを作成するプログラムが書き込み用に開いて閉じ、削除すると、ループなしで実行できます。あなたのプログラムを実行する前に、次の操作を行います。

touch filename.gcp.in.tmp filename.gcp.out.tmp 
ln filename.gcp.in.tmp filename.gcp.in.tmp.bak 
ln filename.gcp.out.tmp filename.gcp.out.tmp.bak 

一時ファイルの内容は、プログラムの実行が終了した.bakファイルにする必要があります。

2

これにはinotifyとit seems to be built into CentOS 6.3を使用できます。 (a tutorial where you'll find more detailsから取られた)例えば

while true #run indefinitely 
do 
inotifywait -r -e modify,attrib,close_write,move,create,delete /dir && /bin/bash backup-script 
done 

backup-scriptは、あなたが欲しいファイルの作成を確認するために使用し、別の場所にコピーしたいものは何でもあります。 incronも使用できます。

+0

私にこれを見せていただきありがとうございますが、コンソールから 'inotifywait'を使って見つからないことがわかります。おそらく私はそれをインストールする必要があります(?)は不可能です。 –

+0

inotify-toolsパッケージをインストールする必要があるかもしれませんが、チュートリアルでは、EPELリポジトリからインストールされていることに気がつきました。 –

関連する問題