被删除的 .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文件名后缀。

触摸$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为 a printf(因为它输出变量数据),并$path在内for循环中使用,我希望这是正确的。该代码没有使用任何特殊功能,因此我也bash更改了 shell 。/bin/sh

根据inotifywait工作方式、内容$file以及您想要执行的操作,根据$file目录中的所有文件来触摸文件可能就足够了,而不是循环遍历目录中的所有文件。

相关内容