对所有文件执行MV操作,并根据列表更改路径

时间:2019-01-25 08:34:46

标签: bash

我有两个问题。

我有一个file.txt,每行的名称是一个例子,

specie1
specie2
specie3
...

,我想在以下每个路径中创建一个名为new_dir的新目录

/specie_1/run_busco/run_specie_1_ok_v3/
/specie_2/run_busco/run_Specie_2_ok_v3/
/specie_3/run_busco/run_Specie_3_ok_v3/

获取:

/specie_1/run_busco/run_specie_1_ok_v3/new_dir
/specie_2/run_busco/run_Specie_2_ok_v3/new_dir
/specie_3/run_busco/run_Specie_3_ok_v3/new_dir

第二个问题是相同的,但现在我想将一些文件移到创建的new_dir中,例如,我会将一些文件移到run_specie_X_ok_v3 /中,例如:

/specie_1/run_busco/run_specie_1_ok_v3/
seq1.faa
seq2.faa
seq3.faa

/specie_2/run_busco/run_Specie_2_ok_v3/
seq1.faa
seq2.faa
seq3.faa

/specie_3/run_busco/run_Specie_3_ok_v3/
seq1.faa
seq2.faa
seq3.faa

我想对所有目录执行mv *faa new_dir

您知道如何操作吗?我的意思是我的问题是因为路径始终根据specie_name改变。

我试图做这样的事情:

cat file.txt | while read line
do
    echo mkdir '/'$file'/run_busco/run_'$file'_ok_v3/new_dir'
done

,然后运行所有生成的脚本。 与第二个问题相同:

cat file.txt | while read line
do
    echo mv '/'$file'/run_busco/run_'$file'_ok_v3/*.faa new_dir'
done

1 个答案:

答案 0 :(得分:1)

$file替换为$line,而您不需要回声

cat file.txt | while read line; do mkdir "/$line/run_busco/run_$line_ok_v3/new_dir"; done


cat file.txt | while read line; do mv "/$line /run_busco/run_${line}_ok_v3/*.faa new_dir"; done