일치하는 모든 파일 이름 패턴에 대해 명령 실행

일치하는 모든 파일 이름 패턴에 대해 명령 실행

파일 이름을 변수로 사용하여 이름 패턴으로 지정하는 명령이 있습니다.file_*_123.txt

Script.sh file_*_123.txt

이제 일치하는 패턴이 있는 파일이 여러 개 있는 경우 첫 번째 파일에 대해서만 실행되므로 이름 패턴과 일치하는 모든 파일에 대해 이 스크립트가 실행되기를 원합니다. 예를 들어 file_1_123.txt, file_2_123.txt, file_3_123.txt

일종의 for 루프입니다. 그러나 파일 수가 1개 이상일 수 있으므로 반복 방법을 잘 모르겠습니다.

누구든지 해결책을 제안할 수 있나요?

답변1

여기에는 루프에서 스크립트를 호출하거나 스크립트가 명령줄 인수를 반복하도록 배열하는 작업이 포함됩니다.

첫 번째 옵션:

for filename in file_*_123.txt; do
    ./Script.sh "$filename"
done

그러면 패턴과 일치하는 각 파일에 대해 한 번씩 스크립트가 호출됩니다 file_*_123.txt.

두 번째 옵션:

스크립트를 수정하고 본문을 루프로 래핑할 수 있습니다.

#!/bin/sh

for filename do
    # here you do whatever you need to do with "$filename"
done

또는,

#!/bin/sh

for filename in "$@"; do
    # here you do whatever you need to do with "$filename"
done

(루프의 두 변형은 동일합니다)

이로 인해 스크립트가 명령줄 인수를 반복하게 됩니다. 그런 다음 질문에 표시된 대로 스크립트를 실행합니다.

./Script.sh file_*_123.txt

답변2

일치하는 파일을 병렬로 실행하려면 유틸리티 사용을 고려할 수 있습니다.평행선

코드 예

funcXXXX(){
    file_path="${1}"
    /PATH/Script.sh "${file_path}"
}

# make function funcXXXX can be used by parallel
export -f funcXXXX

ls /PATH/file_*_123.txt | xargs -l | parallel -k -j 0 funcXXXX

관련 정보