![xargs' -I 부작용을 해결하려면 "| xargs -n 1"이 필요합니까?](https://linux55.com/image/5611/xargs'%20-I%20%EB%B6%80%EC%9E%91%EC%9A%A9%EC%9D%84%20%ED%95%B4%EA%B2%B0%ED%95%98%EB%A0%A4%EB%A9%B4%20%22%7C%20xargs%20-n%201%22%EC%9D%B4%20%ED%95%84%EC%9A%94%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
나는 이것을 발견하고 놀랐다:
$ echo 1 2 3 4 5 | xargs -n 1 echo
1
2
3
4
5
$ echo 1 2 3 4 5 | xargs -n 1 -I FOO echo FOO
1 2 3 4 5
즉, 이 -I
플래그를 사용하면 다음과 같은 부작용이 있습니다.
또한 따옴표가 없는 공백은 항목을 종료하지 않으며 대신 구분 기호는 개행 문자입니다.
그래서 내가 보는 해결책은 다음과 같습니다.
$ echo 1 2 3 4 5 | xargs -n 1 | xargs -n 1 -I FOO echo FOO
1
2
3
4
5
더 나은 해결책이 있습니까?
내 실제 명령줄은 다음과 같습니다.
echo 102DRIFT 103DRIFT 104DRIFT 105DRIFT | xargs -n 1 | xargs -n 1 -I _DIR_ python process.py /SDcard/DCIM/_DIR_/ MyTrace.gpx 10
(해당되는 경우 Ubuntu Trusty.)
답변1
그리고GNU xargs-d
, 다음 옵션을 사용할 수 있습니다 .
$ echo 1 2 3 4 5 | xargs -n 1 -d" " -I FOO echo FOO
1
2
3
4
5
답변2
xargs
나는 당신이 전혀 필요하지 않다고 생각합니다 :
for DCIM in /SDcard/DCIM/10[2-5]DRIFT/
do python process.py "$DCIM" MyTrace.gpx 10
done
그 외에도 수행할 수 있는 몇 가지 다른 작업이 있습니다.
printf 10%dDRIFT\\n 2 3 4 5 | ...the rest...
또는 입력에 따옴표가 없는 경우...
IN | tr \ \\n | xargs ... the rest ...
답변3
불행하게도
echo 1 2 3 4 5 | xargs -n 1 -d" " -I FOO echo FOO
cuonglm의 답변에 따르면 또 다른 빈 줄이 생성되고 명령이 5번이 아닌 6번 실행됩니다.
내 솔루션은 다음 해결 방법을 사용하는 것입니다.
echo 1 2 3 4 5 | tr ' ' '\n' | xargs -I FOO echo FOO