在Linux中将文件重命名为父目录名称的一部分

在Linux中将文件重命名为父目录名称的一部分

我必须根据父目录名称的一部分重命名目录内的大量文件(每个目录一个文件):例如

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

相关内容