범위의 모든 숫자에 대해 명령을 실행하는 방법

범위의 모든 숫자에 대해 명령을 실행하는 방법

나는 다음과 같은 것을하고 싶다

specmd file5.awe
specmd file6.awe
specmd file7.awe
specmd file8.awe
specmd file9.awe
specmd file10.awe
specmd file11.awe
specmd file12.awe

이를 수행할 수 있는 좋은 방법이 있습니까? 제가 생각하는 가장 좋은 방법은

ruby -e "10.upto(15){|i| puts i}" | xargs -I {} specmd file{}.awe

이는 Ruby에 의존하고 이 경우에는 Ruby가 필요하지 않은 것처럼 느껴지기 때문에 확실히 좋은 접근 방식은 아닙니다.

참고: 더 많은 파일이 있습니다(예: file4.awe, file13.awe).아니요원하므로 어떤 와일드카드(아마?)도 내가 원하는 대로 작동하지 않습니다.

답변1

Bash에서는 내장 명령을 사용하여 범위를 반복하는 루프를 만들 수 있습니다.

for i in {5..12}
do 
    specmd file${i}.awe
done

다른 유사한 상황에 대한 더 많은 옵션이 있습니다. 여기에 링크를 남겨두겠습니다.

http://www.cyberciti.biz/faq/bash-for-loop/

답변2

나는 이것이 오래된 질문이라는 것을 알고 있지만 저항할 수 없습니다.

for 루프도 없고 while 루프도 없고 순수한 명령줄 bash만 있습니다.

echo file{5..12}.awe | xargs -n1 specmd

답변3

for f in file[5-9].awe file1[012].awe
do  : stuff with "$f" files
done

...아니요모두전 세계적으로 그들은 동일합니다.

그렇지 않으면 다음과 같이 할 수 있습니다.

x=4
while  [ 13 -gt "$((x+=1))" ]
do     : stuff with "file$x.awe"
done

...반복될 때 반복자를 생성하는 이점이 있으며 거의 ​​모든 스크립트 쉘에서 기본적으로 작동합니다.(글로브도 마찬가지).

답변4

GNU Parallel을 사용하면 다음과 같습니다:

parallel specmd file{}.awe ::: {5..12}
seq 5 12 | parallel specmd file{}.awe
parallel specmd ::: file{5..12}.awe

관련 정보