脚本文件名为create_filelist.sh的文件用于批量获取某一个目录下的文件名及路径,以及该图片对应的label。
内容如下:
#!/usr/bin/env sh
TRAIN_DATA=data/raw_data/train
VAL_DATA=data/raw_data/val
echo "creating train.txt..."
rm -rf $TRAIN_DATA/train.txt
find $TRAIN_DATA -name soldier*.jpg | cut -d '/' -f 4-5 | sed "s/$/ 1/" >>$TRAIN _DATA/train.txt
find $TRAIN_DATA -name nonsoldier*.jpg | cut -d '/' -f 4-5 | sed "s/$/ 2/" >>$TRAIN_DATA/train.txt
echo "done."
echo "creating val.txt..."
rm -rf $VAL_DATA/val.txt
find $VAL_DATA -name soldier*.jpg | cut -d '/' -f 4-5 | sed "s/$/ 1/" >>$VAL_DATA/val.txt
find $VAL_DATA -name nonsoldier*.jpg | cut -d '/' -f 4-5 | sed "s/$/ 2/" >>$VAL_DATA/val.txt
echo "done."
注意事项:
cut -d '/' -f 4-5 表示将前面find命令获得的一行内容以/为标志进行切割,并且显示(保留)第4-5个片段;
sed "s/$/ 1/"表示在前面一个步骤的基础上,$/表示为在一行的末尾,1/表示增加一个空格和一个数字1.需要注意在1后面要加一个斜杠/,否则会报错sed: -e expression #1, char 6: unterminated `s' command
最后用>>将得到的每一行内容写入一个txt文件中,注意用>>表示追加写入,用>表示刷新写入