将目录中的文件移动到名称匹配的子目录中

将目录中的文件移动到名称匹配的子目录中

我有一个文件目录,所有文件都以某个前缀 {0000..0030} 开头,并且都遵循如下命名约定:0000_0000_124_23.png, 0000_0001_124_23.png, 0001_0001_124_23.png, ...

我创建了与文件前缀对应的子目录0000/, 0001/, ...,并尝试将文件移动到与其前缀匹配的子目录中。我试过了,for i in {00..30}; do mv 00$i_*.png 00$i/; done但似乎只能将所有文件移动到一个子目录中。我如何确保文件进入正确的文件夹?

答案1

问题在于:

00$i_*.png

下划线是标识符名称中的有效字符,但变量$i_为空,因此它扩展为

00*.png

并移动所有文件。

解决方案

将变量名与下划线分隔。

00$i\_*.png

或者

00${i}_*.png

相关内容