将数字文件移到相应的数字目录中

时间:2018-07-17 09:25:41

标签: bash unix scripting

我有一个目录,其中包含(除其他外),一组具有相同扩展名(.ctl)的227个数据文件和数字列出的名称(tmp0001.ctl,tmp0002.ctl,tmp0003.ctl ... tmp0227)。 ctl等)。我想将所有这些数据文件放到它们自己的单独目录中,这些目录以数据文件命名(即folder1,Folder2,Folder3 ... folder227等)。

我知道如何指定只需要.ctl文件,并自动执行该过程

 $('.main-nav > li ').click(function(){
    $('.site-nav').slideUp() 
     });

但是后来我不知道如何创建新目录以数字顺序将它们移动到其中。

我应该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:3)

如果我正确理解了这个问题,请尝试以下操作:

for file in *.ctl; do
    if [[ $file =~ 0*([0-9]+)\.ctl$ ]]; then
        mkdir -p -- "folder${BASH_REMATCH[1]}"
        mv -- "$file" "$_"
    fi  
done

BASH_REMATCH是一个特殊的数组,其中[[ ... =~ ... ]]中的匹配项被分配给该数组。

答案 1 :(得分:1)

您需要使用一些参数替换。

从循环开始:

for file in *.ctl
do

done

在循环体内,我们需要通过除去后缀和前缀以及前导零来将$file转换为目录名:

dir=${file%.ctl}        # remove suffix
dir=${dir#tmp}          # remove prefix
dir=folder$((10#$dir))  # leading zeros; add new prefix

我们通过重新解释为以10为底的数字(通常以0开头的数字为八进制)来删除前导零。

现在,这很简单

mkdir -p "$dir"
mv "$file" "$dir"