linux 批量复制文件

linux 批量复制文件,第1张

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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7315430.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存