모든 .bam 파일에 .bai 파일이 포함되어 있는지 확인하고 싶습니다. 따라서 clean_xyz_1.sorted.bam이 존재한다면 clean_xyx_1.sorted.bam.bai도 존재해야 합니다. 각 파일의 중간에는 변수 문자열(xyz)이 있습니다. 여러 폴더를 확인하여 두 파일이 모두 존재하는지 확인하고 싶습니다. 파일이 모두 존재하지 않으면 명령을 실행하고 싶습니다. 그러나 여러 디렉터리에 있는 두 개의 파일을 확인할 수는 없습니다. 내가 시도한 것은 다음과 같습니다.
dirs=(*/)
clean="clean_"
sorted="_1.sorted.bam"
for i in "$dirs"/"$clean"*"$sorted"*; do
if [[ ! -e "$i".bai ]]; then
samtools index "$i"
fi
done
명령이 제대로 실행되고 ".bai" 파일이 생성됩니다. 그러나 첫 번째 디렉터리만 열립니다. 모든 디렉토리를 확장하는 방법이 있습니까?
ベストアンサー1
dir=(*/)
현재 작업 디렉터리에 디렉터리 배열을 만들어 첫 번째 요소만 인쇄하는 ${dir[@]}
대신 사용해야 하는 배열을 반복합니다 .$dir
"$dirs"/"$clean"*"$sorted"*
파일 도 일치합니다 .bai
. 이는 원치 않는 동작일 수 있습니다. 그러므로 나는 */"$clean"*"$sorted"
glob의 for 루프를 사용하는 것을 권장합니다.
그래서 저는 이런 변화를 제안했습니다.
shopt -s nullglob
clean="clean_"
sorted="_1.sorted.bam"
for i in */"$clean"*"$sorted"; do
if [[ ! -e "$i".bai ]]; then
samtools index "$i"
fi
done