使用文件名称组件对文件进行排序和分类(unix)

使用文件名称组件对文件进行排序和分类(unix)

我有一个文件夹,其中包含数千个文件,遵循以下命名方案:

'研究所模型场景河流.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

相关内容