根据部分文件名创建文件夹,并将特定文件移至特定文件夹

时间:2020-08-10 13:03:18

标签: string shell

我有成千上万个文件需要移到不同的文件夹中。文件名是: a_b_c001_1_aug_03_08.09.41.34.tif a_b_c001_1_aug_03_08.29.16.33.tif a_b_c002_1_aug_03_08.59.31.21.tif a_b_c002_1_aug_03_07.19.51.33.tif a_b_c002_1_aug_03_07.55.11.54.tif ...... a_b_c163_1_aug_03_08.09.11.34.tif

我想创建文件夹c001,c002,...,c163,并移动a_b_c001_1_aug_03_08.09.41.34.tif 将a_b_c001_1_aug_03_08.29.16.33.tif移至文件夹c001中,将a_b_c002_1_aug_03_08.59.31.21.tif 将a_b_c002_1_aug_03_07.19.51.33.tif移至文件夹c002,将a_b_c163_1_aug_03_08.09.11.34.tif移至文件夹c163。

有人可以帮我弄清楚如何为此编写脚本吗?我对编码了解甚少,我知道可能需要使用for循环,但是对于我来说,此任务太难了。预先感谢。

1 个答案:

答案 0 :(得分:0)

如果您的所有文件名都具有相同的格式并且只有3位数字,这是一种简便的方法:

for i in *.tif; do folder=${i:4:4}; mkdir -p $folder; cp $i $folder;done

如果您在c后面有3个以上的数字,则可以尝试以下方式:

for i in *.tif; do
  folder=${i:4}
  under="_"
  rest=${folder#*$under}
  folder=${folder:: $(( ${#folder} - ${#rest} - ${#under} ))}
  mkdir -p $folder
  cp $i $folder
done

如果您的前缀不总是a_b_或类似的前缀,则将不起作用。但是您可以改善它。