for 루프를 사용하여 프로그램을 실행하는 명령이 포함된 두 번째 bash 스크립트에 파이프하려는 압축 파일로 가득 찬 폴더가 있습니다. 지금까지 나는 다음을 가지고 있습니다 :
targ_path='/scratch/mine/allfiles/targetfiles/'
mybashpath='/scratch/mine/secondbash.sh'
cd $targ_path
ls | grep \.gz | $mybashpath {}
하지만 이것이 틀렸다는 것을 알고 있습니다. for 루프를 사용하여 파일을 두 번째 bash 스크립트로 파이프해야 합니다.
저는 bash를 처음 접했고 여기에 도움을 주시면 정말 감사하겠습니다.
답변1
의도가 디렉터리를 다음으로 변경한 $targ_path
다음 해당 디렉터리 $mybashpath
에서 이름이 끝나는 .gz
각 파일을 인수로 사용하여 스크립트를 한 번 호출하는 것이라고 가정합니다.
#!/bin/bash
shopt -s nullglob
targ_path=/scratch/mine/allfiles/targetfiles
mybashpath=/scratch/mine/secondbash.sh
cd "$targ_path" || exit
for name in ./*.gz; do
"$mybashpath" "$name"
done
그러면 디렉터리가 로 변경되지만 $targ_path
실패하면 종료됩니다.
./*.gz
그런 다음 와일드카드 패턴과 일치하는 이름(즉, .로 끝나는 현재 디렉터리의 모든 이름)을 반복합니다 .gz
. 이 이름을 $mybashpath
스크립트에 대한 인수 로 사용하여 각 이름에 대해 한 번씩 스크립트를 호출합니다.
또한 nullglob
와일드카드 패턴이 일치하지 않는 경우 루프가 한 번 실행되지 않도록 스크립트 상단에 셸 옵션을 설정했습니다.
$mybashpath
스크립트가 매개변수를 사용하는 방식 에 따라 cd
이는 필요하지 않을 수도 있습니다.
#!/bin/bash
shopt -s nullglob
targ_path=/scratch/mine/allfiles/targetfiles
mybashpath=/scratch/mine/secondbash.sh
for name in "$targ_path"/*.gz; do
"$mybashpath" "$name"
done