![다른 쉘의 zsh "echo SomeText >> **/filename"](https://linux55.com/image/38424/%EB%8B%A4%EB%A5%B8%20%EC%89%98%EC%9D%98%20zsh%20%22echo%20SomeText%20%26gt%3B%26gt%3B%20**%2Ffilename%22.png)
특정 파일 이름을 가진 모든 파일을 텍스트로 (재귀적으로) 채워야 합니다. 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' {} +