하나의 파일에 대해 이와 같이 작동하는 스크립트가 있습니다.
./script 0001g.log > output
다음과 같이 두 개 이상의 파일에 대해
./script 0001g.log 0002g.log 0003g.log > output
스크립트는 각 입력 파일에서 하나의 특수 번호를 가져와 하나의 출력 파일에 넣습니다.
내 질문은 1000개의 입력 파일이 있다는 것입니다. 스크립트를 실행하기 위해 루프를 어떻게 수행할 수 있습니까?
답변1
몇 가지 가능한 해결책이 있습니다.
간단히
$ ./script *g.log >output
... 그리고 *g.log
명령줄이 너무 길어지는 문제로 확장되지 않기를 바랍니다. 이것은 그다지 강력하지 않습니다.
스크립트가 제공된 파일 수에 의존하지 않는 경우, 즉 output
각 입력 파일에 대해 출력을 추가할 수 있는 경우 다음은 또 다른 해결책입니다.
$ find ./ -type f -name "*g.log" | xargs ./script >output
세 번째 해결책은 루프를 스크립트 자체로 옮기는 것입니다.
for f in *g.log; do
# old code using "$f" as file name
done
이는 스크립트에 있으므로 명령줄 길이 제한 문제가 없습니다.
이제 스크립트 호출은 다음과 같습니다.
$ ./script >output
답변2
만약에
./script 0001g.log 0002g.log 0003g.log > output
방정식.
./script 0001g.log > output
./script 0002g.log >> output
./script 0003g.log >> output
그런 다음 루프를 사용하거나
`seq -f '%04gg.log' 10` | script > output
답변3
원한다면 파일을 디렉토리에 넣을 수 있습니다
/opt/location/source
/0001g.log
/0002g.log
/0003g.log
그런 다음 bash 스크립트에서 다음을 시도해 볼 수 있습니다
#!/bin/bash
# store path to files
SOURCE="/opt/location/source/"
# loop through files
for FILE in `ls $SOURCE*g.log`; do
# do what you want to specific file
echo $FILE
done