根据文件名将多个文件移动到多个文件夹

根据文件名将多个文件移动到多个文件夹

我在一个名为数字的文件夹中有一堆文件,如 001001 .. 001002 .. 002001 .. 002002 .. 等等,直到 114001 .. 114002,我想将以相同数字开头的每组文件移动到一个文件夹中,所有以 001 开头的文件移动到文件夹 1,所有以 110 开头的文件移动到文件夹 110 等等,创建文件夹没有问题,但我无法一步移动子文件夹中的文件,希望有人能帮助我做到这一点

答案1

似乎这里的主要技巧是将文件名转换为目标文件夹名称。有两个步骤:截断除前三位数字之外的所有数字,并删除零填充。为此,我分别选择了sed和命令:$((10#

for X in *; do mv $X $((10#$(echo $X | sed -e 's/^\(...\).*/\1/') )); done

这给了我一些小错误,例如mv: cannot move ‘114’ to a subdirectory of itself, ‘114/114’,但是如果您的文件被移动到您想要去的地方,您可能不会在意这些错误。

答案2

下面一行代码将创建目录并移动分组文件:

for f in *; do mkdir ${f:0:3}; mv $f ${f:0:3}/; done

如果您已经有目录结构,请使用以下命令:

for f in *; do mv $f ${f:0:3}/; done

相关内容