나는 xargs
질문에 직접 대답 하지는 않지만 find
의 -exec
옵션을 언급 할 가치가 있음을 알고 있습니다.
다음과 같은 파일 시스템이 제공됩니다.
[root@localhost bokeh]# tree --charset assci bands
bands
|-- Dream\ Theater
|-- King's\ X
|-- Megadeth
`-- Rush
0 directories, 4 files
find 명령은 Dream Theater와 King 's X의 공간을 처리하도록 만들 수 있습니다. 따라서 grep을 사용하여 각 밴드의 드러머를 찾으십시오.
[root@localhost]# find bands/ -type f -exec grep Drums {} +
bands/Dream Theater:Drums:Mike Mangini
bands/Rush:Drums: Neil Peart
bands/King's X:Drums:Jerry Gaskill
bands/Megadeth:Drums:Dirk Verbeuren
에서 -exec
옵션{}
경로를 포함한 파일 이름을 의미합니다. 이스케이프하거나 따옴표로 묶을 필요는 없습니다.
-exec
종료 자 +
와 ( \;
) 의 차이점은 +
하나의 명령 줄에 가능한 많은 파일 이름을 그룹화한다는 것입니다. 이므로\;
각 파일 이름에 대한 명령을 실행합니다.
따라서 find bands/ -type f -exec grep Drums {} +
결과는 다음과 같습니다.
grep Drums "bands/Dream Theater" "bands/Rush" "bands/King's X" "bands/Megadeth"
find bands/ -type f -exec grep Drums {} \;
결과는 다음 과 같습니다.
grep Drums "bands/Dream Theater"
grep Drums "bands/Rush"
grep Drums "bands/King's X"
grep Drums "bands/Megadeth"
이 경우 grep
파일 이름 인쇄 여부에 따른 부작용이 있습니다.
[root@localhost bokeh]# find bands/ -type f -exec grep Drums {} \;
Drums:Mike Mangini
Drums: Neil Peart
Drums:Jerry Gaskill
Drums:Dirk Verbeuren
[root@localhost bokeh]# find bands/ -type f -exec grep Drums {} +
bands/Dream Theater:Drums:Mike Mangini
bands/Rush:Drums: Neil Peart
bands/King's X:Drums:Jerry Gaskill
bands/Megadeth:Drums:Dirk Verbeuren
물론, grep
'옵션을이야 -h
와 -H
파일 이름에 관계없이 어떻게 인쇄할지 여부를 제어합니다 grep
라고합니다.
xargs
xargs
명령 행에서 man 파일이있는 방법을 제어 할 수도 있습니다.
xargs
기본적으로 모든 인수는 한 줄로 그룹화됩니다. -exec \;
사용 하는 것과 동일한 작업을 수행합니다 xargs -l
. 이 -t
옵션은 xargs
명령을 실행하기 전에 인쇄하도록 지시 합니다.
[root@localhost bokeh]# find ./bands -type f | xargs -d '\n' -l -t grep Drums
grep Drums ./bands/Dream Theater
Drums:Mike Mangini
grep Drums ./bands/Rush
Drums: Neil Peart
grep Drums ./bands/King's X
Drums:Jerry Gaskill
grep Drums ./bands/Megadeth
Drums:Dirk Verbeuren
참조하십시오 -l
옵션은 xargs가 모든 파일 이름에 대해 grep을 실행하도록 지시합니다.
기본값과 비교 ( -l
옵션 없음 ) :
[root@localhost bokeh]# find ./bands -type f | xargs -d '\n' -t grep Drums
grep Drums ./bands/Dream Theater ./bands/Rush ./bands/King's X ./bands/Megadeth
./bands/Dream Theater:Drums:Mike Mangini
./bands/Rush:Drums: Neil Peart
./bands/King's X:Drums:Jerry Gaskill
./bands/Megadeth:Drums:Dirk Verbeuren
xargs
명령 줄에 몇 개의 파일이 있는지 더 잘 제어 할 수 있습니다. -l
옵션 당 명령 당 최대 파일 수를 제공하십시오 .
[root@localhost bokeh]# find ./bands -type f | xargs -d '\n' -l2 -t grep Drums
grep Drums ./bands/Dream Theater ./bands/Rush
./bands/Dream Theater:Drums:Mike Mangini
./bands/Rush:Drums: Neil Peart
grep Drums ./bands/King's X ./bands/Megadeth
./bands/King's X:Drums:Jerry Gaskill
./bands/Megadeth:Drums:Dirk Verbeuren
[root@localhost bokeh]#
이 grep
때문에 두 개의 파일 이름으로 실행 되었음을 참조하십시오 -l2
.
ls |grep mp3 |sed -n "7p"
사용할 수 있습니다echo "Lemon Tree.mp3"
.