我必须根据父目录名称的一部分重命名目录内的大量文件(每个目录一个文件):例如
abc_S1_R1/contig.fasta
bcd_S2_R1/contig.fasta
cde_S5_R1/contig.fasta
我最终想要的名字是:
abc_S1_R1/abc.fasta
bcd_S2_R1/bcd.fasta
cde_S5_R1/cde.fasta
我该怎么做最好?谢谢。
答案1
尝试以下代码。您可能需要echo
在行前添加一个mv
,以检查命令是否正确。仅当名称中包含空格或其他字符时才需要引号。
for x in */contig.fasta; do
d=$(dirname "$x")
p=$(echo $d | cut -d_ -f1)
mv "$d/contig.fasta" "$d/$p.fasta"
done