我的文件名如下所示:
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 重命名,所以我猜最好使用这个命令,但我不知道正则表达式...
答案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"
如果结果看起来正确,请删除。