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