Skip to content

Commit e57ff89

Browse files
authored
修正xargs.md排版错误
1 parent da39e29 commit e57ff89

File tree

1 file changed

+172
-171
lines changed

1 file changed

+172
-171
lines changed

command/xargs.md

Lines changed: 172 additions & 171 deletions
Original file line numberDiff line numberDiff line change
@@ -1,171 +1,172 @@
1-
xargs
2-
===
3-
4-
给其他命令传递参数的一个过滤器
5-
6-
## 补充说明
7-
8-
**xargs命令** 是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。
9-
10-
### xargs命令用法
11-
12-
xargs用作替换工具,读取输入数据重新格式化后输出。
13-
14-
定义一个测试文件,内有多行文本数据:
15-
16-
```
17-
cat test.txt
18-
19-
a b c d e f g
20-
h i j k l m n
21-
o p q
22-
r s t
23-
u v w x y z
24-
25-
```
26-
27-
多行输入单行输出:
28-
29-
```
30-
cat test.txt | xargs
31-
32-
a b c d e f g h i j k l m n o p q r s t u v w x y z
33-
```
34-
35-
**-n选项** 多行输出:
36-
37-
```
38-
cat test.txt | xargs -n3
39-
40-
a b c
41-
d e f
42-
g h i
43-
j k l
44-
m n o
45-
p q r
46-
s t u
47-
v w x
48-
y z
49-
```
50-
51-
**-d选项** 可以自定义一个定界符:
52-
53-
```
54-
echo "nameXnameXnameXname" | xargs -dX
55-
56-
name name name name
57-
```
58-
59-
结合 **-n选项** 使用:
60-
61-
```
62-
echo "nameXnameXnameXname" | xargs -dX -n2
63-
64-
name name
65-
name name
66-
```
67-
68-
**读取stdin,将格式化后的参数传递给命令**
69-
70-
假设一个命令为 sk.sh 和一个保存参数的文件arg.txt:
71-
72-
```
73-
#!/bin/bash
74-
#sk.sh命令内容,打印出所有参数。
75-
76-
echo $*
77-
78-
```
79-
80-
arg.txt文件内容:
81-
82-
```
83-
cat arg.txt
84-
85-
aaa
86-
bbb
87-
ccc
88-
89-
```
90-
91-
xargs的一个 **选项-I** ,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次:
92-
93-
```
94-
cat arg.txt | xargs -I {} ./sk.sh -p {} -l
95-
96-
-p aaa -l
97-
-p bbb -l
98-
-p ccc -l
99-
100-
```
101-
102-
复制所有图片文件到 /data/images 目录下:
103-
104-
```
105-
ls *.jpg | xargs -n1 -I cp {} /data/images
106-
```
107-
108-
**xargs结合find使用**
109-
110-
用rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用xargs去避免这个问题:
111-
112-
```
113-
find . -type f -name "*.log" -print0 | xargs -0 rm -f
114-
```
115-
116-
xargs -0将\0作为定界符。
117-
118-
统计一个源代码目录中所有php文件的行数:
119-
120-
```
121-
find . -type f -name "*.php" -print0 | xargs -0 wc -l
122-
```
123-
124-
查找所有的jpg 文件,并且压缩它们:
125-
126-
```
127-
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
128-
129-
```
130-
131-
**xargs其他应用**
132-
133-
假如你有一个文件包含了很多你希望下载的URL,你能够使用xargs下载所有链接:
134-
135-
```
136-
cat url-list.txt | xargs wget -c
137-
138-
```
139-
140-
### 子Shell(Subshells)
141-
142-
运行一个shell脚本时会启动另一个命令解释器.,就好像你的命令是在命令行提示下被解释的一样,类似于批处理文件里的一系列命令。每个shell脚本有效地运行在父shell(parent shell)的一个子进程里。这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程。
143-
144-
```
145-
cmd1 | ( cmd2; cmd3; cmd4 ) | cmd5
146-
```
147-
148-
如果cmd2 是cd /,那么就会改变子Shell的工作目录,这种改变只是局限于子shell内部,cmd5则完全不知道工作目录发生的变化。子shell是嵌在圆括号()内部的命令序列,子Shell内部定义的变量为局部变量。
149-
150-
子shell可用于为一组命令设定临时的环境变量:
151-
152-
<pre class="PROGRAMLISTING">COMMAND1
153-
COMMAND2
154-
COMMAND3
155-
(
156-
IFS=:
157-
PATH=/bin
158-
unset TERMINFO
159-
set -C
160-
shift 5
161-
COMMAND4
162-
COMMAND5
163-
exit 3 # 只是从子shell退出。
164-
)
165-
# 父shell不受影响,变量值没有更改。
166-
COMMAND6
167-
COMMAND7
168-
```
169-
170-
171-
<!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
1+
xargs
2+
===
3+
4+
给其他命令传递参数的一个过滤器
5+
6+
## 补充说明
7+
8+
**xargs命令** 是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。
9+
10+
### xargs命令用法
11+
12+
xargs用作替换工具,读取输入数据重新格式化后输出。
13+
14+
定义一个测试文件,内有多行文本数据:
15+
16+
```
17+
cat test.txt
18+
19+
a b c d e f g
20+
h i j k l m n
21+
o p q
22+
r s t
23+
u v w x y z
24+
25+
```
26+
27+
多行输入单行输出:
28+
29+
```
30+
cat test.txt | xargs
31+
32+
a b c d e f g h i j k l m n o p q r s t u v w x y z
33+
```
34+
35+
**-n选项** 多行输出:
36+
37+
```
38+
cat test.txt | xargs -n3
39+
40+
a b c
41+
d e f
42+
g h i
43+
j k l
44+
m n o
45+
p q r
46+
s t u
47+
v w x
48+
y z
49+
```
50+
51+
**-d选项** 可以自定义一个定界符:
52+
53+
```
54+
echo "nameXnameXnameXname" | xargs -dX
55+
56+
name name name name
57+
```
58+
59+
结合 **-n选项** 使用:
60+
61+
```
62+
echo "nameXnameXnameXname" | xargs -dX -n2
63+
64+
name name
65+
name name
66+
```
67+
68+
**读取stdin,将格式化后的参数传递给命令**
69+
70+
假设一个命令为 sk.sh 和一个保存参数的文件arg.txt:
71+
72+
```
73+
#!/bin/bash
74+
#sk.sh命令内容,打印出所有参数。
75+
76+
echo $*
77+
78+
```
79+
80+
arg.txt文件内容:
81+
82+
```
83+
cat arg.txt
84+
85+
aaa
86+
bbb
87+
ccc
88+
89+
```
90+
91+
xargs的一个 **选项-I** ,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次:
92+
93+
```
94+
cat arg.txt | xargs -I {} ./sk.sh -p {} -l
95+
96+
-p aaa -l
97+
-p bbb -l
98+
-p ccc -l
99+
100+
```
101+
102+
复制所有图片文件到 /data/images 目录下:
103+
104+
```
105+
ls *.jpg | xargs -n1 -I cp {} /data/images
106+
```
107+
108+
**xargs结合find使用**
109+
110+
用rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用xargs去避免这个问题:
111+
112+
```
113+
find . -type f -name "*.log" -print0 | xargs -0 rm -f
114+
```
115+
116+
xargs -0将\0作为定界符。
117+
118+
统计一个源代码目录中所有php文件的行数:
119+
120+
```
121+
find . -type f -name "*.php" -print0 | xargs -0 wc -l
122+
```
123+
124+
查找所有的jpg 文件,并且压缩它们:
125+
126+
```
127+
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
128+
129+
```
130+
131+
**xargs其他应用**
132+
133+
假如你有一个文件包含了很多你希望下载的URL,你能够使用xargs下载所有链接:
134+
135+
```
136+
cat url-list.txt | xargs wget -c
137+
138+
```
139+
140+
### 子Shell(Subshells)
141+
142+
运行一个shell脚本时会启动另一个命令解释器.,就好像你的命令是在命令行提示下被解释的一样,类似于批处理文件里的一系列命令。每个shell脚本有效地运行在父shell(parent shell)的一个子进程里。这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程。
143+
144+
```
145+
cmd1 | ( cmd2; cmd3; cmd4 ) | cmd5
146+
```
147+
148+
如果cmd2 是cd /,那么就会改变子Shell的工作目录,这种改变只是局限于子shell内部,cmd5则完全不知道工作目录发生的变化。子shell是嵌在圆括号()内部的命令序列,子Shell内部定义的变量为局部变量。
149+
150+
子shell可用于为一组命令设定临时的环境变量:
151+
152+
```
153+
COMMAND1
154+
COMMAND2
155+
COMMAND3
156+
(
157+
IFS=:
158+
PATH=/bin
159+
unset TERMINFO
160+
set -C
161+
shift 5
162+
COMMAND4
163+
COMMAND5
164+
exit 3 # 只是从子shell退出。
165+
)
166+
# 父shell不受影响,变量值没有更改。
167+
COMMAND6
168+
COMMAND7
169+
```
170+
171+
172+
<!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->

0 commit comments

Comments
 (0)