xargs 명령의 중괄호가 대체되지 않았습니다.

xargs 명령의 중괄호가 대체되지 않았습니다.

나는 이 명령을 실행하려고 노력해 왔습니다. 그런데 예상치 못한 결과가 나왔습니다. 이것은 내 입장에서 명백한 실수인 것 같지만, 알아낼 수는 없습니다.

내가 시도한 것은 다음과 같습니다.

현재 디렉토리에 file.txt가 있다고 가정하면 다음과 같습니다.

find ./ -name *.txt -print0 | xargs --null -I {} echo {}

그러면 다음이 성공적으로 반환됩니다.

./file.txt

그러나 다음과 같은 파일에 에코되도록 수정하면 다음과 같습니다.

find ./ -name *.txt -print0 | xargs --null -I {} echo 'some string' > {}.alt

결과는 내가 기대했던 것과 다릅니다.

-rw-r--r-- 1 User 197121     5 Mar  5 20:33 {}
-rw-r--r-- 1 User 197121   908 Mar  5 04:32 file.txt

원하는 출력은 콘텐츠 이름 file.txt.altsome string지정된 파일을 갖는 것입니다.

누구든지 도움의 손길을 빌려주신다면 정말 감사하겠습니다.

답변1

셸은 파이프라인이 실행되기 전에 리디렉션을 설정합니다. 대신 다음과 같은 것을 사용할 수 있습니다.

find ./ -name '*.txt' -exec sh -c 'for f; do echo "some string" > "$f".alt; done' sh {} +

관련 정보