Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将包含数字的文件分组并划分到saperate文件夹中_Python_Linux_Bash_Sh - Fatal编程技术网

Python 将包含数字的文件分组并划分到saperate文件夹中

Python 将包含数字的文件分组并划分到saperate文件夹中,python,linux,bash,sh,Python,Linux,Bash,Sh,我想按顺序移动30组中的文件,从图像1、图像2开始。。。从当前文件夹到新文件夹 文件名模式如下所示 image_1.png image_2.png . . . image_XXX.png I want to move image_[1-30].png to folder fold30 and image[31-60].png to fold60 and so on 我有以下代码来做这件事,它的作品想知道有没有任何捷径来做到这一点 或者有没有更小的代码,我可以写同样的 #/bin/bash

我想按顺序移动30组中的文件,从图像1、图像2开始。。。从当前文件夹到新文件夹

文件名模式如下所示

image_1.png
image_2.png
.
.
.
image_XXX.png

I want to move image_[1-30].png to folder fold30
and image[31-60].png to fold60 and so on 
我有以下代码来做这件事,它的作品想知道有没有任何捷径来做到这一点

或者有没有更小的代码,我可以写同样的

#/bin/bash
计数器=0
folvalue=30
totalFiles=$(ls-1 image.*.png | sort-V | wc-l)
foldernames=折叠$FolderValue
对于$格式的文件(ls-1 image*.png | sort-V)
做
((计数器++))
mkdir-p$foldernames
mv$file./$foldernames/
如果[[“$counter”-eq“$folvalue”]];
然后
设folvalue=folvalue+30
foldernames=“fold${folvalue}”
echo$foldernames
fi
完成
上面的代码在文件夹中移动图像1、图像2、…4..30

折叠30

图像\u 31,…图像\u 60到文件夹

折叠60


我真的建议您随时使用
sed
all。这对眼睛来说很难,但一旦你习惯了,你就可以在短时间内完成所有这些令人不快的任务。


它的作用很简单。运行
sed-e“s/regex/substitution/”最简单的方法是使用
rename
,也称为
Perl rename
。它将:

  • 允许您运行任意复杂度的代码来找出新名称
  • 让你做一次试运行,告诉你不做任何事情它会做什么
  • 如果有任何文件将被覆盖,将向您发出警告
  • 自动创建中间目录层次结构
因此,您需要的命令是:

rename -n -p -e '(my $num = $_) =~ s/\D//g; $_ = ($num+29)-(($num-1)%30) . "/" . $_' *png
样本输出

'image_1.png' would be renamed to '30/image_1.png'
'image_10.png' would be renamed to '30/image_10.png'
'image_100.png' would be renamed to '120/image_100.png'
'image_101.png' would be renamed to '120/image_101.png'
'image_102.png' would be renamed to '120/image_102.png'
'image_103.png' would be renamed to '120/image_103.png'
'image_104.png' would be renamed to '120/image_104.png'
...
...

如果这看起来是正确的,您可以在不使用
-n
开关的情况下再次运行它来真正执行此操作。

在删除选项-p后,它正在打印正确的示例输出,我们需要添加mkdir-p以创建新文件夹。我从未使用过Perl,我不确定我可以在哪里添加mkdir,如果我得到任何解决方案,我会尝试更新它,感谢您的帮助将
-p
保留在中,它将为您创建目录。只需删除
-n
'image_1.png' would be renamed to '30/image_1.png'
'image_10.png' would be renamed to '30/image_10.png'
'image_100.png' would be renamed to '120/image_100.png'
'image_101.png' would be renamed to '120/image_101.png'
'image_102.png' would be renamed to '120/image_102.png'
'image_103.png' would be renamed to '120/image_103.png'
'image_104.png' would be renamed to '120/image_104.png'
...
...