bash 可以根据文件名创建文件夹,然后将文件移动到文件夹中吗?

bash 可以根据文件名创建文件夹,然后将文件移动到文件夹中吗?

在 /Desktop/a/ 上,有一组文件:

DSCN1840.AVI00001.png
DSCN1840.AVI00002.png
DSCN1840.AVI00003.png
DSCN1841.AVI00001.png

我想要的是具有以下结构:

Desktop/a/DSCN1840/

  DSCN1840.AVI00001.png

  DSCN1840.AVI00002.png

  DSCN1840.AVI00003.png

Desktop/a/DSCN1841/

  DSCN1841.AVI00001.png

答案1

作为一次性步骤,您可以循环遍历所有文件并收集所需的子目录名称;如果该子目录尚不存在,则创建它;然后将该文件移动到该子目录中:

for f in *.png
do
  subdir=${f%%.*}
  [ ! -d "$subdir" ] && mkdir -- "$subdir"
  mv -- "$f" "$subdir"
done

其中的关键部分是 中的参数扩展${f%%.*},它表示删除%%句点后跟任何内容的最长匹配部分 ( ),这有效地剥离了例如.AVI00003.png文件名的部分,仅留下前导目录指示符。

相关内容