나는 이 명령을 실행하려고 노력해 왔습니다. 그런데 예상치 못한 결과가 나왔습니다. 이것은 내 입장에서 명백한 실수인 것 같지만, 알아낼 수는 없습니다.
내가 시도한 것은 다음과 같습니다.
현재 디렉토리에 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.alt
이 some string
지정된 파일을 갖는 것입니다.
누구든지 도움의 손길을 빌려주신다면 정말 감사하겠습니다.
답변1
셸은 파이프라인이 실행되기 전에 리디렉션을 설정합니다. 대신 다음과 같은 것을 사용할 수 있습니다.
find ./ -name '*.txt' -exec sh -c 'for f; do echo "some string" > "$f".alt; done' sh {} +