xargs' -I 부작용을 해결하려면 "| xargs -n 1"이 필요합니까?

xargs' -I 부작용을 해결하려면 "| xargs -n 1"이 필요합니까?

나는 이것을 발견하고 놀랐다:

$ 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 FOOcuonglm의 답변에 따르면 또 다른 빈 줄이 생성되고 명령이 5번이 아닌 6번 실행됩니다.

내 솔루션은 다음 해결 방법을 사용하는 것입니다.

echo 1 2 3 4 5 | tr ' ' '\n' | xargs -I FOO echo FOO

관련 정보