내 파일 이름은 다음과 같습니다.
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"
결과가 정확해 보이면 삭제하세요.