Bash를 사용하여 파일 확장자 제거

Bash를 사용하여 파일 확장자 제거

파일 확장자를 제거하려고 시도했지만 때로는 .2가 .1 또는 .3이 ./m161016_023529_42229_c101105162550000001823259804261747_s1_p0.2.bax.h5되었습니다 ../m161016_023529_42229_c101105162550000001823259804261747_s1_p0.2

이것은 배쉬 코드입니다:

#!/bin/bash

for i in $(ls -d /work/waterhouse_team/All_RawData/Each_Cell_Raw/RSII_SMRT*/Analysis_Results);
do
  cd $i
  baxs=($(find . -type f -name "*.bax.h5"))

  cat <<EOF
  #qsub <<EOF
#!/bin/bash -l

#PBS -N bax2bam
#PBS -l walltime=150:00:00
#PBS -j oe
#PBS -l mem=50G
#PBS -l ncpus=4
#PBS -M [email protected]
##PBS -m bea

source /work/waterhouse_team/apps/pacbio/setup-env.sh
cd $i;

bax2bam ${baxs[@]} -o ${baxs[0]%%.bax.h5} --subread

EOF

done

이것은 bash 출력입니다:

  #qsub <<EOF
#!/bin/bash -l

#PBS -N bax2bam
#PBS -l walltime=150:00:00
#PBS -j oe
#PBS -l mem=50G
#PBS -l ncpus=4
#PBS -M [email protected]
##PBS -m bea

source /work/waterhouse_team/apps/pacbio/setup-env.sh
cd /work/waterhouse_team/All_RawData/Each_Cell_Raw/RSII_SMRT72/Analysis_Results;

bax2bam ./m161014_135413_42229_c101104702550000001823259804261737_s1_p0.1.bax.h5 ./m161014_135413_42229_c101104702550000001823259804261737_s1_p0.2.bax.h5 ./m161014_135413_42229_c101104702550000001823259804261737_s1_p0.3.bax.h5 -o ./m161014_135413_42229_c101104702550000001823259804261737_s1_p0.1 --subread

  #qsub <<EOF
#!/bin/bash -l

#PBS -N bax2bam
#PBS -l walltime=150:00:00
#PBS -j oe
#PBS -l mem=50G
#PBS -l ncpus=4
#PBS -M [email protected]
##PBS -m bea

source /work/waterhouse_team/apps/pacbio/setup-env.sh
cd /work/waterhouse_team/All_RawData/Each_Cell_Raw/RSII_SMRT73/Analysis_Results;

bax2bam ./m161016_023529_42229_c101105162550000001823259804261747_s1_p0.2.bax.h5 ./m161016_023529_42229_c101105162550000001823259804261747_s1_p0.3.bax.h5 ./m161016_023529_42229_c101105162550000001823259804261747_s1_p0.1.bax.h5 -o ./m161016_023529_42229_c101105162550000001823259804261747_s1_p0.2 --subread

내가 놓친 게 무엇입니까?

미리 감사드립니다

답변1

문자열 조작 명령은 해당 .bax.h5부분만 제거합니다. 추가 선행 점과 숫자를 제거하려면 다음과 같은 것을 사용하십시오 ${baxs[0]%%.[0-9].bax.h5}.

답변2

제가 보기에는 점 3개로 구성된 확장자를 제거하려는 것 같습니다(예 .2.bax.h5: 이것이 사실이라면 매개변수 확장을 사용할 수 있습니다). 또한 파일과 같은 파일을 사용하거나 처리해서는 안 됩니다 ls.find

#!/bin/bash

shopt -s globstar nullglob

for f in **/*.bax.h5; do
   mv -- "$f" "${f%.*.*.*}"
done

exit

*.bax.h5이는 작업 디렉터리에서 시작하여 일치하는 파일을 반복적으로 반복합니다. 그런 다음 문자열 끝부터 시작하여 확장을 제거하고 .총 3번 표시될 때까지 모든 것을 제거합니다.

관련 정보