다른 쉘에서 zsh의 "echo SomeText >> **/filename"

다른 쉘에서 zsh의 "echo SomeText >> **/filename"

특정 파일 이름을 가진 모든 파일을 (재귀적으로) 텍스트로 채워야 합니다. zsh에서는 다음과 같이 할 수 있습니다.

echo SomeText > **/TheFileName

나는 sh 호환 및/또는 tcsh 쉘에 대한 일반적인 솔루션을 검색합니다. 다음 명령보다 더 짧고 쉬운 방법이 있습니까?

find . -name "TheFileName" -print0 | xargs -0 sed -n -i -e '1c\nSomeText'

답변1

find . -name TheFileName -type f -exec sh -c 'for i do
     echo SomeText > "$i"; done' sh {} +

답변2

다음을 위해 사용할 수 있습니다 tee:

쉘이 와 올바르게 일치하고 **/TheFileName문제는 단순히 각 파일의 콘텐츠를 가져오는 것입니다.

echo SomeText | tee **/TheFileName >/dev/null

문제가 **/TheFileName제대로 일치하지 않는 경우 다음을 사용할 수 있습니다 find.

echo SomeText | find . -name TheFileName -exec tee {} + >/dev/null

find없으면 -exec +여기에 있는 다른 솔루션이 적합합니다.

파일 수가 매우 많은 경우(보다 많음 getconf ARG_MAX)에도 작동하지 않습니다.

답변3

조금 더 짧음:

find . -name TheFileName -type f -exec sed -n -i -e '1c SomeText' {} +

관련 정보