bash - 重命名 fasta headers 和子目录中的文件名 - 附加前缀

bash - rename fasta headers and filenames within subdirectories - append prefix

我的文件结构的一个简化示例是这样的:

/Assemblies/A_velvet/contigs.fasta
/Assemblies/A_velvet/info.log
/Assemblies/BB_velvet/contigs.fasta
/Assemblies/BB_velvet/info.log

我正在尝试编写一个可以传递程序集目录的脚本 - 然后它将:

  1. 遍历每个子目录 (A_velvet, BB_velvet) - 获取菌株名称 (A, BB) 将其作为前缀添加到其中的所有文件中 (即 A_contigs.fasta, A_file.log)。
  2. 在 contigs.fasta 文件中的 fasta headers 添加相同的前缀。 也许使用 sed 命令替换 ('s/>NODE/>${name}/g')?

我发现了很多密切相关的问题,但似乎无法解决它们。很感谢任何形式的帮助!到目前为止,这是我的代码:

#!/bin/bash
#Run with: ./test.sh <assembly_directory>
#dir= directory with all assemblies inside it
dir=
for subdir in $dir 
do
    if [ -d "${subdir}" ]; then
    name=`basename $subdir|cut -d '_' -f 1`;
    echo "${subdir} name ${name}"
         for * in $subdir;
        `do mv "$file" "$subdir/${name}_$(basename "$file")"; done
    fi
done    

您循环访问目录内容的方法行不通。在第一种情况下,循环中的唯一项是 $dir。我不确定您在第二种情况下要做什么。尝试这样的事情:

dir= 
for subdir in `ls $dir` 
do
    if [ -d "${subdir}" ]; then
        name=`basename $subdir|cut -d '_' -f 1`;
        echo "${subdir} name ${name}"
        for file in `ls $subdir`;
        do mv "$file" "$subdir/${name}_$(basename "$file")"; done
    fi
done