如何根据父目录为子目录中的多个文件添加后缀?
How to add suffix to multiple files in subdirectories based on parent directory?
我有 100 多个目录如下:
bins_copy]$ ls
bin.1/
bin.112/
bin.126/
bin.24/
bin.38/
等等等
这些目录中的每一个都包含两个文件名 genes.faa
和 genes.gff
,例如bin.1/genes.faa
我现在想根据父目录添加一个后缀,这样每个基因文件都有一个唯一的标识符,例如bin.1/bin1_genes.faa
和 bin1_genes.gff
.
我整个上午都在探索 google 兔子洞,到目前为止没有任何效果。
我试过这样的事情:
for each in ./bin.*/genes.faa ; mv genes.faa ${bin%-*}_genes.faa $each ; done
但是那个(以及它的几个版本)给我以下错误:
-bash: syntax error near unexpected token `mv'
由于这是一个非常通用的问题,我还没有弄清楚,非常感谢您的帮助。
干杯/
可能有更优雅的方法来执行此操作,但在与 bin 目录相同的目录中创建此脚本,chmod 700 和 运行。你可能想先用 tar 备份 (tar -cf bin.tar ./bin*)
#!/bin/bash
files="bin.*"
for f in $files; do
mv ./${f}/genes.faa ./${f}/${f}_genes.faa
mv ./${f}/genes.gff ./${f}/{$f}_genes.gff
done
试试这个 Shellcheck-干净的代码:
#! /bin/bash -p
for genespath in bin.*/genes.*; do
dir=${genespath%/*}
dirnum=${dir##*.}
genesfile=${genespath##*/}
new_genespath="$dir/bin${dirnum}_${genesfile}"
echo mv -iv -- "$genespath" "$new_genespath"
done
- 它目前只打印所需的
mv
命令。确认 echo
可以满足您的要求后,请将其删除。
我有 100 多个目录如下:
bins_copy]$ ls
bin.1/
bin.112/
bin.126/
bin.24/
bin.38/
等等等
这些目录中的每一个都包含两个文件名 genes.faa
和 genes.gff
,例如bin.1/genes.faa
我现在想根据父目录添加一个后缀,这样每个基因文件都有一个唯一的标识符,例如bin.1/bin1_genes.faa
和 bin1_genes.gff
.
我整个上午都在探索 google 兔子洞,到目前为止没有任何效果。 我试过这样的事情:
for each in ./bin.*/genes.faa ; mv genes.faa ${bin%-*}_genes.faa $each ; done
但是那个(以及它的几个版本)给我以下错误:
-bash: syntax error near unexpected token `mv'
由于这是一个非常通用的问题,我还没有弄清楚,非常感谢您的帮助。
干杯/
可能有更优雅的方法来执行此操作,但在与 bin 目录相同的目录中创建此脚本,chmod 700 和 运行。你可能想先用 tar 备份 (tar -cf bin.tar ./bin*)
#!/bin/bash
files="bin.*"
for f in $files; do
mv ./${f}/genes.faa ./${f}/${f}_genes.faa
mv ./${f}/genes.gff ./${f}/{$f}_genes.gff
done
试试这个 Shellcheck-干净的代码:
#! /bin/bash -p
for genespath in bin.*/genes.*; do
dir=${genespath%/*}
dirnum=${dir##*.}
genesfile=${genespath##*/}
new_genespath="$dir/bin${dirnum}_${genesfile}"
echo mv -iv -- "$genespath" "$new_genespath"
done
- 它目前只打印所需的
mv
命令。确认echo
可以满足您的要求后,请将其删除。