xargs

参数简介

1
2
3
4
5
6
7
8
9
10
11
12
13
-0 用\0分割字符串 , 主要和find -print0配合, 能操作不规范文件名的文件 如: 1 log.txt (有空格的文件名)
-E 自定义结束标记 , 找到该标记之后 后面的内容就不读入了
-I 给拿到的每一行数据起个别名 如: find . -type f -name "*.png" | xargs -I @ echo @
-J 和I差不多, BSD shell 独有, GNU shell没有
-L 一次读取多少行
-n 一次选中多少行, 和-L差不多
-o 没查到资料
-P 没查到资料
-p 没查到资料
-R 没查到资料
-s 没查到资料
-t 显示命令, 调试用的
-x 没查到资料

sed 单引号获取变量值的写法

1
2
3
4
5
sed -i "" 's/regex/replace/g' file

sed -i "" 's/regex/'"${var}"'/g' file

Yeah, in mac should use -I, e.g. redis-cli keys 'foo*' | xargs -I @ echo @

linux & mac xargs区别

1
2
3
4
5
# linux
basename -s .JPG -a *.JPG | xargs -n1 -i mv {}.JPG {}.jpg

# mac
basename -s .JPG -a *.JPG | xargs -n1 -I {} mv {}".JPG" {}".jpg"

真对有空格的文件名的解决办法

1
find . -type f -name "*.png" -print0  | xargs -0 -L 1 -I @ echo @

参考:
http://www.jb51.net/LINUXjishu/205761.html

mac -J -I 都能用 效果差不多 , 为了和 Linux统一还是用-I吧

参考:
https://superuser.com/questions/529742/how-can-i-move-files-with-xargs-on-linux/529744
https://unix.stackexchange.com/questions/407634/xargs-j-option

-n 与 -L的区别

1
2
3
4
5
6
7
8
9
find . -type f -name "*.png" -print0 | xargs -0 -L 2 -t echo
#-L 从标准输入一次读取num行送给Command命令

echo ./下载 (1).png ./下载 (2).png
./下载 (1).png ./下载 (2).png
echo ./下载.png ./图片 1.png
./下载.png ./图片 1.png
echo ./图片 21.png
./图片 21.png
1
2
find . -type f -name "*.png" -print0 | xargs -0 -n5 -t open
# -n 相当于 多选, 当-n5的时候 图片不是一个个打开, 会打开成 列表

Alt text
参考:
http://blog.163.com/squall_smile/blog/static/603498402013122570281/