특정 파일 이름을 가진 모든 파일을 (재귀적으로) 텍스트로 채워야 합니다. 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' {} +