Bash 根据列表对路径更改的所有文件执行mv

Bash 根据列表对路径更改的所有文件执行mv,bash,Bash,我有两个问题 我有一个file.txt,每行有一个物种的名称,例如: specie1 specie2 specie3 ... 我想在以下路径中创建一个名为new_dir的新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_

我有两个问题

我有一个file.txt,每行有一个物种的名称,例如:

specie1
specie2
specie3
...
我想在以下路径中创建一个名为new_dir的新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
我的第二个问题也一样,但现在我想将一些文件移到新创建的目录中,例如,我将一些文件移到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
我想为所有目录做一个新的目录

你知道怎么做吗?我的意思是,我的问题是因为路径根据物种名称一直在变化

我曾尝试过这样做:

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

$line
替换
$file
,您就不需要echo了

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

你试过这个吗?在不共享任何代码的情况下,需要提出很多要求是的,当然你可以这样做。您可以通过简单的参数扩展(字符串索引或删除子字符串)隔离
种类
x
,然后使用这两个子字符串形成所需的路径并执行移动。你尝试了什么?我更新了我的帖子,谢谢。我有一个问题,它说:没有这样的文件或目录,因为它理解以下路径。faa和跳过part.mv需要两个参数,第一个是源路径,第二个是目标路径。我已经看到你有问题了,这是我的脚本:
cat文件_all_species_name.txt |在读行时;do mv“/path/data/$line/run\u-busco/run\u-line\u-busco\u v3/single\u-copy\u-busco\u-sequences/*.fna/path/data/$line/run\u-busco/run\u-line\u-busco\u v3/single\u-copy\u-busco\u-sequences/single\u-copy\u-busco\u-核苷酸”;完成
,我有两个问题;第一个是缺少的目的地,但我仍然放了路径目的地,第二个是源路径不正确,因为它打印:
'/path/data/specie\u 2/run\u busco/run\u/single\u copy\u busco\u sequences/*.fna
而不是
'/path/data/specie\u 2/run\u busco/run\u specie\u busco\u V3/single\u copy\u busco\u sequences/*.fna
现在仍然可以了关于缺少的目的地,我不理解mv的工作方式,如我在上面的脚本中所写的
mv/path/source/path/destination
。在您的mv语句中,我只看到源路径、源和目标部分需要在它们之间加空格