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
我正在尝试编写一个可以传递程序集目录的脚本 - 然后它将:
- 遍历每个子目录 (A_velvet, BB_velvet) - 获取菌株名称 (A, BB) 将其作为前缀添加到其中的所有文件中 (即 A_contigs.fasta, A_file.log)。
- 在 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
我的文件结构的一个简化示例是这样的:
/Assemblies/A_velvet/contigs.fasta
/Assemblies/A_velvet/info.log
/Assemblies/BB_velvet/contigs.fasta
/Assemblies/BB_velvet/info.log
我正在尝试编写一个可以传递程序集目录的脚本 - 然后它将:
- 遍历每个子目录 (A_velvet, BB_velvet) - 获取菌株名称 (A, BB) 将其作为前缀添加到其中的所有文件中 (即 A_contigs.fasta, A_file.log)。
- 在 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