移动/分组文件Unix

时间:2012-03-22 17:06:24

标签: file unix directory

我有一个包含大约1000个文件的文件夹,我想根据他们的重要父文件夹对它们进行分组。

我做了ls- R > updated.txt来获取文件夹和文件的原始设置。

updated. txt看起来像这样:

./Rhodococcus_RHA1:
NC_008268.fna
NC_008269.fna
NC_008270.fna
NC_008271.fna

./Rhodoferax_ferrireducens_T118:
NC_007901.fna
NC_007908.fna

./Rhodopseudomonas_palustris_BisA53:
NC_008435.fna

./Rhodopseudomonas_palustris_BisB18:
NC_007925.fna

./Rhodopseudomonas_palustris_BisB5:
NC_007958.fna

./Rhodopseudomonas_palustris_CGA009:
NC_005296.fna
NC_005297.fna

因此,通过查看此文件,我知道哪些文件进入了哪个文件夹。包含所有1000个文件的文件夹如下所示:

results_NC_004193.fna.1.ebwt.map
results_NC_004307.fna.1.ebwt.map
results_NC_004310.fna.1.ebwt.map
results_NC_004311.fna.1.ebwt.map
results_NC_004337.fna.1.ebwt.map
results_NC_004342.fna.1.ebwt.map
results_NC_004343.fna.1.ebwt.map
results_NC_004344.fna.1.ebwt.map

依旧......

您可以看到所有1000个文件的文件名都取决于文件夹设置中的原始名称(如果这是解释它的好方法)。

我想使用原始设置将这些results_XXXXXXXX文件移动到文件夹(必须创建新文件夹)。所以它应该是这样的:

./Rhodococcus_RHA1: (this is a folder)
results_NC_008268.fna.1.ebwt.map 
results_NC_008269.fna.1.ebwt.map
results_NC_008270.fna.1.ebwt.map
results_NC_008271.fna.1.ebwt.map

./Rhodoferax_ferrireducens_T118:
results_NC_007901.fna.1.ebwt.map
results_NC_007908.fna.1.ebwt.map

我真的不知道怎么做...也许是某种mov命令?我很感激这个问题的帮助。

1 个答案:

答案 0 :(得分:1)

从包含这1000个文件的文件夹中运行以下命令。 path / to / original / files是原始文件的路径(你做的那个ls -R)。你应该得到一个mv命令列表。验证其中几个以确认这些是正确的。如果是这样,添加|接下来命令并重新运行它以执行这些命令。如果您没有1000文件文件夹中的所有相应文件,您将获得将返回“找不到文件”的mv命令,可以忽略或通过管道传送到/ dev / null。这假设您始终在原始文件夹中有一个文件,以便它知道文件的移动位置。如果没有,那些1000个文件中的一些将不会被移动。和往常一样,在这之前做好备份。

find path/to/original/files -type f | awk -F"/" '{ path=$0; sub($NF, "", path); printf("mv results_%s.1.ebwt.map \"%s\"\n", $NF, path);}'