.BRDファイルと.MIXファイルを削除しました。それらを作成する

.BRDファイルと.MIXファイルを削除しました。それらを作成する

私はBBSを運営しています。 DOSからLinuxにソフトウェアを移植しています。インパルスフォーラム。私のメッセージのデフォルトファイルに問題があります。問題は、.BRD何らかの理由でファイルを削除するとシステムの動作が中断されることです。そしてBBSがクラッシュしました。.BRDこれらのファイルが失われた場合は、それらを生成する方法を見つける必要があります。私が書いたスクリプトは次のとおりです。

#!/bin/bash

inotifywait --daemon --outfile /home/imp/imp/test.log -m /home/imp/imp/msgs -e create 
while read path action file; do
    echo "The file '$file' appeared in directory '$path' via '$action'"
    for name in /home/imp/imp/msgs/*.MIX; do
            touch "${name}.BRD"
    done
done

しかし、うまくいかないようです。実際にはtouchファイルではありません.BRD。これらの.BRDファイルのサイズは0バイトです。inotifywaitこの状況を解決する最良の方法であるようで、これを使用しています。inotifywait私のニーズに合わせてうまく機能する他のスクリプトがあります。

ベストアンサー1

コードをあまり見ていないと、inotifywaitループの内部部分が変数の内容に基づいてファイルに触れるように見えますname

for name in /home/imp/imp/msgs/*.MIX; do
        touch "${name}.BRD"
done

値は最後にファイル名サフィックスが付いた$nameパス名になります。.MIX

Touchを押すと、ファイル名のサフィックスが付いた$name.BRDファイルが作成されます。.MIX.BRD信じるおそらく元の.MIXサフィックスが欲しいでしょう。交換済み合格.BRD

実行方法は次のとおりです。

for name in /home/imp/imp/msgs/*.MIX; do
        touch "${name%.MIX}.BRD"
done

${name%.MIX}.MIX値の末尾から削除されます$name

コードの出力をループに供給するために、コマンドの|最後にaがありません。inotifywaitwhile read

#!/bin/sh

inotifywait --daemon --outfile /home/imp/imp/test.log -m /home/imp/imp/msgs -e create |
while read path action file; do
    printf 'The file "%s" appeared in directory "%s" via "%s"\n' "$file" "$path" "$action"

    for name in "$path"/*.MIX; do
            touch "${name%.MIX}.BRD"
    done
done

ここでも私は(変数データを出力するので)に変更し、内部ループで使用するecho自由を得ました。これが正しいことを願っています。コードは特別な機能を使用しないので、シェルも変更しました。printf$pathforbash/bin/sh

inotifywaitどのように機能、機能$file、実行したいかに$file応じて、ディレクトリ内のすべてのファイルを繰り返すのではなく、ディレクトリ内のすべてのファイルに基づいてファイルをタッチするだけで十分です。

おすすめ記事