디렉터리에 중첩된 for 루프

디렉터리에 중첩된 for 루프

다음과 같이 두 개의 파일 세트가 구성되어 있습니다.

#first directory
/direc1/files

file0.1.tar.gz
file0.2.tar.gz
file0.3.tar.gz
file0.4.tar.gz
      .
      .
      .
file0.22.tar.gz

이 디렉토리에는 총 242개의 파일이 있습니다. script.py를 실행하기 위한 현재 중첩 명령은 다음과 같습니다.

for z in `seq 0 10`; do
for i in `seq 1 22`; do python script.py --l2 --ld-wind-cm 1 --annot  file${z}.${i} --thin-annot --out  file${z}.${i} --print-snps;done;done

눈치 채셨다면 file이 루프에 하드코딩해 두었습니다. file${z}.${i}변수를 사용하지 않고 이것을 실행할 수 있는 방법이 있습니까 ?

답변1

귀하의 요청이 명확하지 않습니다. 두 개의 루프가 두 범위에 걸쳐 있는 이유는 무엇입니까? 습관

for FN in *.tar.gz; do echo python script.py --out "$FN"; done

충분한가? echo결과가 만족스러우면 삭제하세요.

처리하려는 파일 외에 다른 파일이 없는 경우 "확장자"가 사라질 수도 for있습니다 *.

답변2

필요한 파일 외에 다른 tar.gz 파일이 있는 경우 다음을 사용할 수 있습니다.

for i in file{0..10}.{1..22}.tar.gz; do python script.py --out "$i" --print-file; done

폴더에 이 파일만 있으면 충분하며 모든 파일 이름에서 작동합니다.

for i in * ; do python script.py --out "$i" --print-file; done

폴더에 tar.gz 파일만 있지만 다른 유형의 파일이 있는 경우 이 방법이 작동하며 tar.gz 파일을 임의의 이름으로 사용할 수 있습니다.

for i in *.tar.gz ; do python script.py --out "$i" --print-file; done

관련 정보