Linux命令_xargs & 批量杀进程、批量拷贝文件、组合字符串

发布于:2022-12-17 ⋅ 阅读:(716) ⋅ 点赞:(0)

目录

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-5
  • xargs 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:批量修改权限


网站公告

今日签到

点亮在社区的每一天
去签到