我需要从多个目录复制特定的命名文件,并且需要按顺序在文件前缀中添加数字。例如,我有以下目录,gene1, gene2, gene3 ..... gene100
每个目录都有一个文件,即protein.fasta
.我需要protein.fasta
从每个目录复制所有文件并粘贴到另一个目录(即输出)中。我已经尝试了以下脚本,但该脚本没有达到我的目的,它只复制和粘贴一个文件,其余的不复制和重命名,最终出现错误。请帮助我做同样的事情。
a=1
for i in **/protein.fasta
do
cp "$i" "$a"_"$i" output/
a=`expr $a + 1`
done
下面给出了详细的示例和预期输出,目录
gene1, gene2, gene3....gene100
要从每个文件中提取的文件是protein.fasta
output
目录中的预期输出
1_protein.fasta
2_protein.fasta
3_protein.fasta
.
.
100_protein.fasta
先感谢您。
答案1
你应该能够循环目录并gene
从当前目录名中删除前缀以用作目标文件名的前缀:
for d in gene*; do
echo cp "$d/protein.fasta" "output/${d#gene}_protein.fasta"
done
echo
一旦您确信它正在做正确的事情,请将其删除。
答案2
我想也许你想用来basename
从文件名中删除目录?
i=1
for f in **/test.file; do
cp "${f}" "out/${i}_$(basename $f)"
(( i += 1 ))
done