我有一个文件夹,其中包含数千个文件,遵循以下命名方案:
'研究所模型场景河流.txt'
文件名称的每个组成部分(机构、模型、场景、河流)都是变量。
然后,我想根据每个变量的名称(除'scenario'
和之外)对这些文件进行排序和分类'river'
。
因此,应以每个机构名称建立相应的目录,这些目录下应由以不同“模型”名称命名的子目录组成。
为了更准确,我想提供一个小例子,考虑以下文件:
wbm_gfdl_rcp4_mississippi.txt
matsiro_gfdl_rcp8_amazon.txt
wbm_miroc_rcp8_niger.txt
我想创建一个'wbm'
包含子目录'gfdl'
(包含以下文件'wbm_gfdl_rcp4_mississippi.txt'
)和'miroc'
(包含以下文件'wbm_miroc_rcp8_niger.txt'
)的目录。以及一个'matsiro'
仅包含子目录'gfdl'
(包含'matsiro_gfdl_rcp8_amazon.txt'
)的目录。
考虑到文件数量巨大,我真的不知道从哪里开始!
答案1
在 bash 中,你可以将文件名拆分为一个数组:
#!/bin/bash
for file in *_*_*_*.txt ; do
IFS=_ arr=($file)
dir=${arr[0]}/${arr[1]}
[[ -d $dir ]] || mkdir -p "$dir"
cp "$file" "$dir"/
done
如果您想移动文件而不是复制文件,请使用mv
而不是cp
。