다른 쉘의 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' {} +

관련 정보