문제

bash 스크립트를 사용하여 특정 파일 다음에 있는 디렉터리의 모든 파일에 대해 내 프로그램을 실행하고 싶습니다.

다음과 같은 디렉토리가 있는 경우:

fileA
fileB
fileC
fileD

나는 달리고 싶다 ./prog <file> 이후의 모든 파일에 대해 fileC.이를 위해 bash 스크립트를 어떻게 작성합니까?

나는 현재

for FILE in ./tests/*; do
  ./prog $FILE
  if [ $? -eq 0 ]; then
    echo "success: $FILE"
  else
    echo "**FAILURE: $FILE"
    exit 1
  fi
done

하지만 해당 디렉터리의 특정 파일에서 시작하고 싶습니다.반드시 정렬할 필요는 없으므로 ls 매번 동일한 특정 순서로 파일을 나열합니다.

일반적으로 스크립트를 실행하고 실패하면 해당 특정 파일에 대해 수정합니다. 하지만 처음부터 다시 시작하지 않고 해당 파일에서 다시 시작하고 싶습니다.

도움이 되었습니까?

해결책

파일이 정렬되어 있으면 다음을 사용할 수 있습니다. '<' 그리고 '>' 두 변수의 문자열 비교를 수행하는 연산자:

startfile=$1
for FILE in ./tests/*; do
    if ! [ "$FILE" '<' "$startfile" ] ; then
        echo doing something with $FILE
    else
        echo Skipping $FILE
    fi
done

다른 팁

for file in `ls tests | grep -A 999999 "^tests/startfile$" | tail -n +2`
do
  whatever
done

grep -A 999999는 테스트/시작 파일(부분 일치를 피하기 위해 ^ 및 $)과 999999 다음 항목을 나열합니다.

tail -n +2 라인 2부터 시작하는 모든 내용을 나열합니다(1 기반).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top