
cp dir1/{file1,file2,file3} dir2 ## 可以实现文件的批量复制
cp -r dir1/ dir2/ ### 实现整个文件夹的复制,r参数表示,如果没有文件夹dir2/ 则创建一个,如果没有r参数会报错。
cp命令并不能直接识别正则表达示,如果要复制的文件很多,会写命令写到吐血。
可以用ls查看文件夹内的所有文件,再传递给grep 用正则表示示筛选,筛选后的文件名再传递给cp命令
需要注意的是cp 不能直接接收 grep的数据,需要用到xargs 命令
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
ls |grep 'M. 1. _M. 2. |M. [1-2]. _P. 18. '|xargs -i cp {} /u01/zhh/300Zeamays/300SCMS/
通常使用shell去运行脚本,两种方法 :
对于 bash xxx.sh , 首先bash 会在当前目录去寻找 xxx.sh ,如果找到,就直接运行,找不到则按照环境变量 $PATH 的指定路径,按顺序去找,如果找到,则执行,找不到则报错。
shell脚本的参数 $0 就是要执行的shell脚本 xxx.sh , $1 就是后面紧跟 xxx.sh 的参数, $2 , $3 依次类推
如果用 bash -c 那么 bash 会从第一个非选项参数后面的字符串中读取命令,如果字符串有多个空格,第一个空格前面的字符串是要执行的命令,也就是 $0 , 后面的是参数,即 $1 , $2 ….
使用bash -c 要注意两点
-c 第一个字符串一定要是命令路径,不能是文件名,如果把./atest前面的./去掉,那么就会报找不到命令
命令文件必须要有可执行权限,即./atest 的必须就有x属性
个人理解bash -c “./atest hello world”实际上和./atest hello world等价
先说说 sh -c 吧, sh , 其实就是 bash 命令.
-c 的意思是 command,所以 bash -c 后面应该跟一个 command。
用法:
管道实现的是将前面的stdout作为后面的stdin,但是有些命令不接受管道的传递方式,最常见的就是ls命令。
有些时候命令希望管道传递的是参数,但是直接用管道有时无法传递到命令的参数位,这时候需要xargs,xargs实现的是将管道传输过来的stdin进行处理然后传递到命令的参数位上。
也就是说xargs完成了两个行为:处理管道传输过来的stdin;将处理后的传递到正确的位置上。
xargs的作用不仅仅限于简单的stdin传递到命令的参数位,它还可以将stdin或者文件stdin分割成批,每个批中有很多分割片段,然后将这些片段按批交给xargs后面的命令进行处理。
通俗的讲就是原来只能一个一个传递,分批可以实现10个10个传递,每传递一次,xargs后面的命令处理这10个中的每一个,处理完了处理下一个传递过来的批,如下图。
Linux中的bash -c 的使用详解
xargs原理及用法详解
awk是linux下强大的文本处理工具xargs是linux下一个常用命令,用于将参数列表打散
这两个命令结合用来批量结束进程:
ps -ef | grep nsq | grep -v grep | awk '{print $2}' | xargs kill #杀掉所有nsq相关进程
awk是什么的缩写?看这里:
https://kb.iu.edu/d/abnd
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)