将 .txt 文件移至子目录中

将 .txt 文件移至子目录中

我在一个目录中有多个目录。

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”作为父目录名称。根据需要进行调整以扩大或缩小范围。

相关内容