我想把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
counter=0
folvalue=30
totalFiles=$(ls -1 image_*.png | sort -V | wc -l)
foldernames=fold$folvalue
for file in $(ls -1 image_*.png | sort -V )
do
((counter++))
mkdir -p $foldernames
mv $file ./$foldernames/
if [[ "$counter" -eq "$folvalue" ]];
then
let folvalue=folvalue+30
foldernames="fold${folvalue}"
echo $foldernames
fi
done
上面的代码在文件夹中移动图像1,图像2,…4..30
fold30
图像\u 31,…图像\u 60到文件夹
fold60
我真的建议每次都使用
sed
all。这对眼睛很难,但一旦你习惯了,你就可以马上完成所有这些烦人的任务。它的作用很简单。运行
sed -e "s/regex/substitution/" <(cat file)
遍历每一行,用substitution
替换匹配模式regex
。有了它,您只需将输入转换为命令,并通过管道将其传输到bash即可。
如果你想知道更多,有好的documentation here(但对眼睛来说也不容易)
不管怎样,代码是这样的:
它应该这样做:
-
while
循环获取第一个30
文件。-从最后一个文件中取出编号并命名目录
-
mkdir FOLDER
-遍历每一行并将
$FILE
转换成mv $FILE $FOLDER
,然后执行这些行(管道到bash)注意:用文件夹替换
$YOUR_PREFIX
编辑:令人惊讶的是,代码没有开箱即用(谁会想到……),但我已经做了一些修复和测试,现在应该可以工作了
最简单的方法是使用
rename
,也就是Perl rename
。它将:所以你想要的命令是:
样本输出
如果看起来正确,您可以再次运行它,而不必使用
-n
开关来真正执行它相关问题 更多 >
编程相关推荐