我在一个目录中有多个目录。
Astrocytes_BloodCells_GeneSet/ Astrocytes_Polydendrocytes_GeneSet/ Endothelia_Neurons_GeneSet/ Microglia.y_Neurons_GeneSet/ Oligodendrocytes_Microglia.y_GeneSet/ Polydendrocytes_Microglia.x_GeneSet/
Astrocytes_Endothelia_GeneSet/ BloodCells_Endothelia_GeneSet/ Microglia.x_BloodCells_GeneSet/ Oligodendrocytes_Astrocytes_GeneSet/ Oligodendrocytes_Neurons_GeneSet/ Polydendrocytes_Microglia.y_GeneSet/
Astrocytes_Microglia.x_GeneSet/ BloodCells_Microglia.y_GeneSet/ Microglia.x_Endothelia_GeneSet/ Oligodendrocytes_BloodCells_GeneSet/ Oligodendrocytes_Polydendrocytes_GeneSet/ Polydendrocytes_Neurons_GeneSet/
Astrocytes_Microglia.y_GeneSet/
每个子目录都包含一个遵循以下格式的文件夹:
_.LD_RESULTS_directoryname
例如,Astrocytes_BloodCells_GeneSet/
包含名为 的文件夹_.LD_RESULTS_Astrocytes_BloodCells_GeneSet/
,等等。这些目录中有多个 .txt 文件。
Astrocytes_BloodCells_GeneSet/,Astrocytes_Polydendrocytes_GeneSet/
我正在尝试编写一个简单的脚本,将等中的 .txt 复制到_.LD_RESULTS_directoryname
文件夹中。我怎样才能实现这个目标?
答案1
假设你有一个顶级目录,其中只有这些目录,我认为以下 shellscript 可以_.LD_RESULTS_
在必要时创建子目录并进行复制。
#!/bin/bash
for i in */
do
target="$i/_.LD_RESULTS_$i"
mkdir -p "$target"
cp -p "${i}"*.txt "$target"
done
您确定要复印吗?另一种方法是移动文件。如果您想要备份,则应将其保存在另一个驱动器中(以便在驱动器崩溃时幸存下来)。
答案2
如果 _.LD_RESULTS 目录名称完全包含父目录名称,则此for
循环应该可以解决问题:
for dir in *_*_GeneSet
do
echo cp "$dir"/*.txt "$dir"/_.LD_RESULTS_"$dir"/
done
我使用了循环通配符的模式for
,需要“任何内容”、下划线、“任何内容”、下划线、“GeneSet”作为父目录名称。根据需要进行调整以扩大或缩小范围。