私は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がありません。inotifywait
while 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
$path
for
bash
/bin/sh
inotifywait
どのように機能、機能$file
、実行したいかに$file
応じて、ディレクトリ内のすべてのファイルを繰り返すのではなく、ディレクトリ内のすべてのファイルに基づいてファイルをタッチするだけで十分です。