美文网首页
Shell脚本生成图片清单

Shell脚本生成图片清单

作者: 咫尺是梦 | 来源:发表于2018-04-20 17:16 被阅读0次

本文以caffe程序中自带的图片为例,进行讲解,图片目录是 example/images/, 两张图片,一张为cat.jpg, 另一张为fish_bike.jpg,表示两个类别。


上述图片

我们创建一个sh脚本文件,调用linux命令来生成图片清单:

# sudo vi examples/images/create_filelist.sh

编辑这个文件,输入下面的代码并保存

# /usr/bin/env sh
DATA=examples/images
echo "Create train.txt..."
rm -rf $DATA/train.txt
find $DATA -name *cat.jpg | cut -d '/' -f3 | sed "s/$/ 1/">>$DATA/train.txt
find $DATA -name *bike.jpg | cut -d '/' -f3 | sed "s/$/ 2/">>$DATA/tmp.txt
cat $DATA/tmp.txt>>$DATA/train.txt
rm -rf $DATA/tmp.txt
echo "Done.."

最终生成如下的一个train.txt文件:

cat.jpg 1
fish-bike.jpg 2

备注:

1.Shell使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="qinjx"
echo $your_name
echo ${your_name}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

推荐给所有变量加上花括号,这是个好的编程习惯。

已定义的变量,可以被重新定义,如:

your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

这样写是合法的,但注意,第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符($)。

2.find命令

参考find命令
根据文件或者正则表达式进行匹配

列出当前目录及子目录下所有文件和文件夹

find .

在/home目录下查找以.txt结尾的文件名

find /home -name "*.txt"

同上,但忽略大小写

find /home -iname "*.txt"

当前目录及子目录下查找所有以.txt和.pdf结尾的文件

find . \( -name "*.txt" -o -name "*.pdf" \)

find . -name "*.txt" -o -name "*.pdf" 

匹配文件路径或者文件

find /usr/ -path "*local*"

3. |命令

在linux中,&和&&,|和||介绍如下:

& 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server &

&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo '2'

| 表示管道,上一条命令的输出,作为下一条命令参数,如 echo 'yes' | wc -l

|| 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo "fail"

4.cut命令

参考 linux之cut用法

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的。

(1)其语法格式为:

cut  [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file]

使用说明
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

主要参数
-b:以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n:取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。

(2)cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢?

cut命令主要是接受三个定位方法:

第一,字节(bytes),用选项-b

第二,字符(characters),用选项-c

第三,域(fields),用选项-f

(3)域是怎么回事呢?解释解释:)

为什么会有“域”的提取呢,因为刚才提到的-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。这时候“域”就派上用场了。如果你观察过/etc/passwd文件,你会发现,它并不像who的输出信息那样具有固定格式,而是比较零散的排放。但是,冒号在这个文件的每一行中都起到了非常重要的作用,冒号用来隔开每一个项。

我们很幸运,cut命令提供了这样的提取方式,具体的说就是设置“间隔符”,再设置“提取第几个域”,就OK了!

以/etc/passwd的前五行内容为例:

[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1
root
bin
daemon
adm
lp

看到了吧,用-d来设置间隔符为冒号,然后用-f来设置我要取的是第一个域,再按回车,所有的用户名就都列出来了!呵呵 有成就感吧!

5.sed命令

参考Linux sed命令

数据的搜寻并替换

除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样:

sed 's/要被取代的字串/新的字串/g'

先观察原始信息,利用 /sbin/ifconfig 查询 IP

[root@www ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
.....(以下省略).....

本机的ip是192.168.1.100。

将 IP 前面的部分予以删除

[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

接下来则是删除后续的部分,亦即: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

将 IP 后面的部分予以删除

[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100

6.linux >和>>的区别,<号使用

linux中经常会用到将内容输出到某文件当中,只需要在执行命令后面加上>或者>>号即可进入操作。

大于号:将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的)重定向其它输出设备(文件,打开文件操作符,或打印机等等)

小于号:命令默认从键盘获得的输入,改成从文件,或者其它打开文件以及设备输入

>>是追加内容

>是覆盖原有内容

示例:

1.  bogon:Desktop wenxuechao$ echo 'abc' > test.txt  
2.  bogon:Desktop wenxuechao$ echo '123' >> test.txt  

执行效果,第一句命令会在桌面创建个test.txt的文件,并且将abc写到文件中。

第二句命令,会在文件下方,再次写入内容。

<小于号

1.  mysql -u root -p -h test < test.sql 导入数据

7. Linux cat命令详解

cat主要有三大功能:

1.一次显示整个文件。

$ cat   filename

2.从键盘创建一个文件。

$ cat  >  filename

只能创建新文件,不能编辑已有文件.

3.将几个文件合并为一个文件。

$cat   file1   file2  > file

cat具体命令格式为 : cat [-AbeEnstTuv] [--help] [--version] fileName

说明:把档案串连接后传到基本输出(屏幕或加 > fileName 到另一个档案)
参数:
-n 或 –number 由 1 开始对所有输出的行数编号
-b 或 –number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 –squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 –show-nonprinting

范例

把 linuxfile1 的档案内容加上行号后输入 linuxfile2 这个档案里:

cat -n linuxfile1 > linuxfile2 

把 linuxfile1 和 linuxfile2 的档案内容加上行号(空白行不加)之后将内容附加到linuxfile3 里:

cat -b linuxfile1 linuxfile2 >> linuxfile3 

清空/etc/test.txt档案内容:

cat /dev/null > /etc/test.txt  

8.^与$

^代表行首
$代表行尾
^$意思就是行首之后就是行尾,中间什么也没有,所以代表空行
则在sed命令中:

s/$//在每一行后面追加空. s为搜索 如s/a/b/ 搜索a 将替换为b ,并只替换一次.
s/ *//g将空格删除. g代表搜索到的全部替换 。“空格星”( " *") 代表多个空格
/^$/d 删除空行.

8.linux下""的作用

例一:

[linux@linux ~]$ echo $HOME
/home/
[linux@linux ~]$ echo \$HOME
$HOME

例子中,反斜线去除了“ $ ”字符的特殊意义,保留字面值,从而不输出home目录路径。

例二:

export PATH=\
/bin:\
/sbin:\
/usr/bin:\
/usr/sbin:\
/usr/local/bin:\
/apps/bin:\
/apps/tools:\
/apps/tslib/bin\

例子中,反斜线使行得以继续,命令可以正常输入。

相关文章

  • Shell脚本生成图片清单

    本文以caffe程序中自带的图片为例,进行讲解,图片目录是 example/images/, 两张图片,一张为c...

  • Shell脚本实练

    目录 根据一张图片生成不同大小像素图片 批量修改图片格式 查找项目中未使用的图片 shell脚本打包ipa 1、根...

  • Shell 脚本中的小技巧

    Shell 脚本中的小技巧 关于变量 一,在shell 脚本中定义默认值 [图片上传失败...(image-54c...

  • shell脚本的编写

    鉴于shell的高效、通用,使用shell编写脚本实现日常使用的一些小功能。 处理生成文件的问题 强烈建议,在生成...

  • 编译最新版FFmpeg

    FFmpeg 编译步骤: 配置环境(NDK,FFmpeg安装包) 配置FFmpeg的shell脚本 执行脚本生成s...

  • 2.16 利用并行进程加速命令执行

    《Linux Shell 脚本攻略(第 2 版)》读书笔记 使用脚本运行md5sum对多个文件生成校验和:

  • iOS 马甲包垃圾代码生成脚本

    iOS马甲包制作+OC、Swift垃圾代码生成脚本 马甲包 iOS shell脚本一键添加垃圾代码 Swift垃圾...

  • Shell入门笔记

    Shell脚本:Linux Shell脚本学习指南菜鸟教程 - Shell教程Linux入门 - Shell脚本是...

  • 2018-09-26

    shell脚本 1.1、什么是shell脚本(shell script , ...

  • Shell script + crontab实现Mysql定时备

    一、Shell 脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 业界所...

网友评论

      本文标题:Shell脚本生成图片清单

      本文链接:https://www.haomeiwen.com/subject/qplzkftx.html