파일 이름을 더 간단한 이름으로 재귀적으로 바꿉니다.

파일 이름을 더 간단한 이름으로 재귀적으로 바꿉니다.

내 파일 이름은 다음과 같습니다.

A06_S6_L001_R1_001.fastq
A06_S6_L001_R2_001.fastq
B07_S6_L001_R1_001.fastq
B07_S6_L001_R2_001.fastq
C08_S6_L001_R1_001.fastq
C08_S6_L001_R2_001.fastq

그리고 나는 원한다:

1A06.R1.fastq
1A06.R2.fastq
1B07.R1.fastq
1B07.R2.fastq
etc...

즉, 첫 번째 밑줄 앞 부분, 마지막 밑줄 앞 부분을 유지하고 그 .사이에 하나를 넣고 파일 확장자를 유지하고 전체 앞에 숫자를 넣고 싶습니다. Perl rename이 있어서 이 명령을 사용하는 것이 더 좋을 것 같은데 정규식을 모르겠습니다 ...

답변1

prename방법:

prename -n 's/^([^_]+)_.*_([^_]+)_[0-9]+\./1$1.$2./' *.fastq

( -n-조치 없음;어떤 파일의 이름이 바뀔지 보여줌)

답변2

bash를 사용하고 선행 접두사로 dirname가정합니다 .1

shopt -s globstar
for file in ./**/*.fastq
do
  [[ $file =~ (...)_(..)_(....)_(..)_(...).fastq ]] && 
  printf "%s\n" "mv -- "$file" "$(dirname "$file")"/1${BASH_REMATCH[1]}.${BASH_REMATCH[4]}.fastq"
done

이 예제 "입력"을 사용하십시오.

touch A06_S6_L001_R1_001.fastq A06_S6_L001_R2_001.fastq B07_S6_L001_R1_001.fastq B07_S6_L001_R2_001.fastq C08_S6_L001_R1_001.fastq C08_S6_L001_R2_001.fastq
mkdir subdir
cp *.fastq subdir/

결과 출력은 다음과 같습니다.

mv ./A06_S6_L001_R1_001.fastq ./1A06.R1.fastq
mv ./A06_S6_L001_R2_001.fastq ./1A06.R2.fastq
mv ./B07_S6_L001_R1_001.fastq ./1B07.R1.fastq
mv ./B07_S6_L001_R2_001.fastq ./1B07.R2.fastq
mv ./C08_S6_L001_R1_001.fastq ./1C08.R1.fastq
mv ./C08_S6_L001_R2_001.fastq ./1C08.R2.fastq
mv ./subdir/A06_S6_L001_R1_001.fastq ./subdir/1A06.R1.fastq
mv ./subdir/A06_S6_L001_R2_001.fastq ./subdir/1A06.R2.fastq
mv ./subdir/B07_S6_L001_R1_001.fastq ./subdir/1B07.R1.fastq
mv ./subdir/B07_S6_L001_R2_001.fastq ./subdir/1B07.R2.fastq
mv ./subdir/C08_S6_L001_R1_001.fastq ./subdir/1C08.R1.fastq
mv ./subdir/C08_S6_L001_R2_001.fastq ./subdir/1C08.R2.fastq

printf "%s\n"결과가 정확해 보이면 삭제하세요.

관련 정보