파일에 대해 이와 같이 작동하는 스크립트가 있습니다.
./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