쉘 스크립트가 있습니다.
#!/bin/bash
for name in /home/imp/imp/msgs/$1.PK1; do
mv "$name" "${name%.PK1}.BRD" 2>/dev/null >/dev/null
done
for name in /home/imp/imp/msgs/$1.PK2; do
mv "$name" "${name%.PK2}.MIX" 2>/dev/null >/dev/null
done
작동하지만 기존 파일에만 해당됩니다. 초기 스캔 후에 더 많은 *.PK1
합계가 생성됩니다. *.PK2
이 스크립트를 "루프"하고 나중에 생성된 파일의 이름을 바꾸길 원합니다. 가능합니까?
고쳐 쓰다:
이것이 내가 지금 가지고 있는 것입니다:
#!/bin/bash
while [ ! -z "$(ls *.PK1 *.PK2 2>/dev/null)" ]; do
for name in /home/imp/imp/msgs/$1.PK1; do
mv "$name" "${name%.PK1}.BRD" 2>/dev/null >/dev/null
done
for name in /home/imp/imp/msgs/$1.PK2; do
mv "$name" "${name%.PK2}.MIX" 2>/dev/null >/dev/null
done
sleep 1; done
그렇죠?
감사해요.
답변1
just 대신 $1
in 을 사용할 이유가 있나요 ? 전역 패턴을 의도적으로 스크립트에 전달하고 있습니까?for name in /path/$1.PK1
for name in /path/*.PK1
이러한 접미사가 있는 모든 파일과 새 파일이 나타나는 대로 캡처하려는 경우 Bash의 간단한 솔루션은 다음과 같습니다.
shopt -s nullglob
dir=/home/imp/imp/msgs
while true ; do
for name in "$dir/"*.PK1; do
mv "$name" "${name%.PK1}.BRD" 2>/dev/null >/dev/null
done
for name in "$dir/"*.PK2; do
mv "$name" "${name%.PK2}.MIX" 2>/dev/null >/dev/null
done
sleep 1
done
추가 작업을 피하려면 (Linux에서) inotifywait
다음과 같이 새 파일이 나타날 때까지 기다리는 것과 같은 방법을 사용할 수 있습니다.
inotifywait를 사용하여 디렉터리에서 특정 확장자를 가진 파일 생성을 모니터링하는 방법