![在Linux中将文件重命名为父目录名称的一部分](https://linux22.com/image/1067682/%E5%9C%A8Linux%E4%B8%AD%E5%B0%86%E6%96%87%E4%BB%B6%E9%87%8D%E5%91%BD%E5%90%8D%E4%B8%BA%E7%88%B6%E7%9B%AE%E5%BD%95%E5%90%8D%E7%A7%B0%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86.png)
我必须根据父目录名称的一部分重命名目录内的大量文件(每个目录一个文件):例如
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