grep을 사용하여 Bash for 루프

grep을 사용하여 Bash for 루프

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

관련 정보