我正在处理数千个文件,其名称包含从 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 实现这一目标的最直接方法是什么?
我有一个通过命令行(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)
等等。
那正确吗?
我可以在询问之前先对其进行测试,但我决定先询问,因为脚本中的此更改可能需要我几个小时才能完成(尽管这听起来像是一个简单的更改)。