我想遍历每个目录的内容,并随机选择每个目录中的文件。代码运行良好。但是,当它遍历目录时,它不会以排序的方式处理它们。例如,我有一个名为Label_1
,Label_2
,Label_3
,...,Label_83
的目录,但当脚本运行时,它会回显Label_1
,Label_2
,Label_10
,...我希望这个回显以一种排序的方式发生,就像Label_2
应该是Label_3
而不是label_10
,因为它会影响train.list和test.list中的最终结果。有什么方法可以对这些目录进行排序,以便它以排序的方式写入输出文件吗?
#!/bin/bash
> train.list
> test.list
COUNT=-1
for folder in $1/*
do
echo $folder
COUNT=$[$COUNT + 1]
for imagesFolder in "$folder"/*
do
if ( (( ( RANDOM % $2 ) )) > 1 ); then
echo "$imagesFolder" $COUNT >> train.list
else
echo "$imagesFolder" $COUNT >> test.list
fi
done
done
2条答案
按热度按时间kokeuurv1#
另一个解决方案是使用
sort
:xxe27gdn2#
一个解决方案是重命名之前的目录与
000
整数前缀:其他同名工具可能无法执行此操作,因此请小心。
如果运行以下命令(
GNU
)如果结果中包含
Perl script, ASCII text executable
而不包含ELF
,那么这似乎是正确的工具=)如果不是,要使其默认(通常已经是这种情况)在
Debian
上并衍生为Ubuntu
:将
/path/to/rename
替换为perl rename
可执行文件的路径。如果你没有这个命令,搜索你的软件包管理器来安装它或do it manually(no deps...)
这个工具最初是由Perl的父亲Larry Wall编写的。