小编thi*_*oso的帖子

Bash - 如何根据名称中的日期重新组织文件?

我正在处理数千个文件,其名称包含从 2001-01-01 到 2020-12-31 的连续日期。

此类文件的示例如下所示:

gpm_original_20010101.nc
gpm_cressman_20010101_cor_method-add_fac-0.5_pass-1_radius-500km.nc
gpm_cressman_20010101_cor_method-add_fac-0.5_pass-2_radius-250km.nc
gpm_cressman_20010101_cor_method-add_fac-0.5_pass-3_radius-150km.nc
gpm_cressman_20010101_cor_method-add_fac-0.5_pass-4_radius-75km.nc
gpm_cressman_20010101_cor_method-add_fac-0.5_pass-5_radius-30km.nc
.
.
.
gpm_original_20010131.nc
gpm_cressman_20010131_cor_method-add_fac-0.5_pass-1_radius-500km.nc
gpm_cressman_20010131_cor_method-add_fac-0.5_pass-2_radius-250km.nc
gpm_cressman_20010131_cor_method-add_fac-0.5_pass-3_radius-150km.nc
gpm_cressman_20010131_cor_method-add_fac-0.5_pass-4_radius-75km.nc
gpm_cressman_20010131_cor_method-add_fac-0.5_pass-5_radius-30km.nc
Run Code Online (Sandbox Code Playgroud)

依此类推,直到2020-12-31。我需要做的是根据年份和月份将这些文件重新组织到新文件夹中。

目录树需要遵循year子目录的逻辑months,如下所示:

2001
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12

2002
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
Run Code Online (Sandbox Code Playgroud)

等等。并且应该根据文件名中的等效日期将文件移动到这些目录。例如:200101xx名称中包含的所有文件都应移动到该2001/01文件夹中。

使用 bash 实现这一目标的最直接方法是什么?

shell scripting bash shell-script

3
推荐指数
2
解决办法
336
查看次数

使用并行从列表中运行具有多个参数的程序

我有一个通过命令行(Ubuntu)运行的 bash 程序,如下所示:

./extract_field.sh ABC001
Run Code Online (Sandbox Code Playgroud)

ABC001我想从给定的 shapefile 中提取的字段 ID在哪里。

要使用多个 ID 运行此脚本,我首先在list.txt文件中每行保存一个 ID :

ABC001
ABC014
ABC213
ABC427
Run Code Online (Sandbox Code Playgroud)

然后使用parallel以下方法调用脚本:

parallel -a list.txt ./extract_field.sh
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。

但是,我计划进行更改,extract_field.sh因此需要两个参数而不是一个参数。如果我只是将文本文件更改为每行容纳两个参数,上述工作流程是否仍然有效?

ABC001 arg2a
ABC014 arg2b
ABC213 arg2c
ABC427 arg2d
Run Code Online (Sandbox Code Playgroud)

通过这种变化,我希望parallel -a list.txt ./extract_field.sh表现得像

./extract_field.sh ABC001 arg2a
./extract_field.sh ABC014 arg2b
Run Code Online (Sandbox Code Playgroud)

等等。

那正确吗?

我可以在询问之前先对其进行测试,但我决定先询问,因为脚本中的此更改可能需要我几个小时才能完成(尽管这听起来像是一个简单的更改)。

command-line bash shell-script gnu-parallel

2
推荐指数
1
解决办法
37
查看次数