내 파일 이름에 숫자 증가 접미사가 있습니다.
filename01
filename02
.
.
.
filename250
다음 cat 명령을 실행하기 전에 일시 중지할 수 있는 명령을 실행할 수 있기를 원합니다.
cat filename01
wait (1sec)
cat filename02
wait (1sec)
.
.
.
.
cat filename250
도와주세요. 내 마지막 파일 이름(filename250)은 더 높은 접미사를 가질 수 있습니다. 변수 설정을 사용하여 for 루프를 수행할 수 있는지 또는 공유하는 경우 더 나은 제안을 제공해주세요. 감사합니다!
답변1
이러한 파일을 숫자로 정렬하려면 zsh
대신 사용하는 것이 좋습니다 bash
.n
숫자 전역 정렬 글로벌 예선그런 이유로. glob 확장 filename250
과 같이 이것이 없으면 기본 glob 정렬 순서가 어휘이기 때문에 및 사이에서 정렬 filename*
하게 됩니다 .filename25
filename26
for file in filename<1-250>(Nn); do
cat < $file
sleep 1
done
( N
일치하는 파일이 없는 경우 오류를 방지하기 위해 ulllglob 한정자를 사용할 수도 있습니다.)
임의의 숫자(1개 이상의 ASCII 10진수 시퀀스) <1-250>
와 일치하거나 모든 항목과 일치하는 것으로 바꿉니다 .<->
*
각 파일 사이에 1초를 기다리지 않고 매초마다 하나의 파일을 캡처합니다 (그리고 파일에 걸리는 시간도 cat
고려하세요 ).cat
typeset -F SECONDS=0
n=0
for file in filename<1-250>(Nn); do
cat < $file
(( SECONDS >= ++n )) || sleep $(( n - SECONDS ))
done
(이것은 a가 sleep
부동 소수점 숫자를 취할 수 있다고 가정합니다).
bash
최신 GNU 시스템 에서는 비슷한 작업을 수행할 수 있습니다.
shopt -s nullglob extglob
print0() { [ "$#" -eq 0 ] || printf '%s\0' "$@"; }
readarray -td '' files <(
print0 filename+([0123456789]) |
LC_ALL=C sort -zV
)
for file in "${files[@]}"; do
cat < "$file"
sleep 1
done
우리는 C 언어 환경에서 sort
GNU 버전 정렬을 사용하여 zsh의 umericglobsort glob 한정자와 유사한 작업을 V
수행합니다 .n
( bash
ksh 플레이버도 있지만 ksh93이나 zsh와 달리 앵커 포인트 $SECONDS
가 될 수 없습니다 )typeset
F