Linux命令_xargs & 批量杀进程、批量拷贝文件、组合字符串
目录
1. 语法
1.1. 常用参数
2. 常见用法
2.1. 指定生成列数
2.2. 指定分隔符
2.3. 指定结束符
2.4. 组合字符串
3. 批量操作
3.1. 批量杀进程
3.2. 批量拷贝文件
3.3. 批量打包目录
3.4. 批量创建文件/目录
3.5. 批量删除文件
3.6. 批量修改文件/目录名
3.7. 批量修改文件权限
1. 语法
xargs [选项] [命令] [初始参数]
1.1. 常用参数
-d:指定分隔符
-n:指定标准输出的列数(最大128K)
-I:将标准输入的每行指定为{}
-i:类似 -I。如果标准输入未指定,则假定{}
-E:指定结束符,若没有找到指定的结束符,那么输出全部
-0:项目之间用null分隔,而不是空格
-a:从文件读取参数,而不是标准输入
-e:如果指定了END,则等效于-E END。否则,就没有文件结束字符串
-L:每行最多使用MAX-LINES非空输入行命令行
-l:每个人最多使用一个非空输入行命令行
-P:一次运行到max-procs进程
-p:执行命令前提示
-r:如果不带参数,则不执行命令。如果这个选项没有给出,COMMAND将会是至少跑一次。
-s:限制命令最多为MAX-CHARS
-t:执行命令前打印命令
-x:如果超过大小(参见-s)则退出
--process-slot-var:在子进程中设置环境变量VAR
--show-limits:显示命令行长度的限制
2. 常见用法
2.1. 指定生成列数
将所有行转换为列(默认分割符为空格)
cat file.txt |xargs
最大行支持128K,超过限制转换到第2行
指定输出2列(默认分割符为空格)
cat file.txt |xargs -n 2
2.2. 指定分隔符
指定分隔符转换为空格
cat file.txt |xargs -d ','
指定分隔符分割为2列
cat file.txt |xargs -d ',' -n 2
2.3. 指定结束符
echo "a b c d" |xargs -E "c"
-E "c":指定结束符为 "c"。从第一个字符开始找,找到 "c" 后退出
2.4. 组合字符串
输出 file1.log file2.log file3.log
seq 3 |xargs -i echo "file{}.log"
{}:表示标准输入的值(需要 -i 指定)
3. 批量操作
3.1. 批量杀进程
ps -ef |grep "process_name" |grep -v grep |awk '{print $2}' |xargs kill -9
process_name:表示进程名awk '{print $2}':表示获取第2列(PID列)xargs kill -9 :以PID作为输入,kill杀死进程
3.2. 批量拷贝文件
find ./ -type f -name "*" |xargs -I {} cp {} file/
find ./ -type f -name "*" |xargs -i cp {} ./
find ./ -type f -name "*":查找当前路径下所有文件-I {}:指定标准输入为{}cp {} file/:将查到的文件拷贝到 file 下
3.3. 批量打包目录
当前路径下所有文件/目录打包成一个tar
ls ./ |xargs tar -cvf dir.tar
指定目录/文件打包成一个tar
echo "dir1 dir3" |xargs tar -cvf dir.tar
将当前所有文件打包成一个tar
find ./ -type f -name "*" |xargs tar -cvf file.tar
3.4. 批量创建文件/目录
使用数字创建文件
seq 5 |xargs touch
使用数字创建目录
seq 5 |xargs mkdir
seq 5:输出1-5xargs touch:以数字1-5作为输入,批量创建文件
自定义创建文件
echo "file1 file2 file3" |xargs touch
组合字符串批量创建文件
seq 10 |xargs -i touch "file{}.log"
3.5. 批量删除文件
find ./ -type f -name "tmp*" |xargs rm -rf
ls ./*.log |xargs rm -rf
find ./ -type f -name "tmp*":查找tmp开头的文件xargs rm -rf:将标准输入的文件路径批量删除
3.6. 批量修改文件/目录名
ls |grep ".log" |xargs -i mv {} "{}.out"
-i:指定标准输入为 {}mv {} "{}.out":{} 表示标准输入。将文件/目录名修改为 [原名].out
3.7. 批量修改文件权限
find ./ -perm 644 | xargs chmod 700
find ./ -perm 644:查找当前路径下权限为644的文件/目录xargs chmod 700:批量修改权限