.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디렉터리의 모든 파일을 반복하는 대신 디렉터리의 모든 파일을 기반으로 파일을 터치하는 것으로 충분할 수 있습니다.

관련 정보