폴더에서 파일을 찾아서 /opt
텍스트를 보내려고합니다. 나는 다음 구문을 시도했다 :
sudo find /opt -name filename-*.conf | xargs -I '{}' echo "text_to_send" > '{}' \;
불행히도 그 후 {}
텍스트가 포함 된 파일을 찾습니다 . 나는 사용하여 시도 '{}'
뿐만 아니라 {}
, "{}"
, \{\}
하지만, 명령,하지만 아무것도 찾을 파일 이름에 대한 자리 표시 자로서 제대로 작동 것 같다. 올바른 구문은 무엇입니까?
답변
이 시도:
sudo find /opt -name filename-*.conf -exec bash -c 'echo "text_to_send" > {}' \;
는 bash -c
리디렉션을 넣어하기 위해 필요 >
에 대한 따옴표 find -exec
.
답변
나는 >
현재 껍질에서 해석된다고 생각한다 . 동일하게 적용 *
당신이 일어날 경우, 즉 filename-A.conf
현재 디렉토리에 다음 명령 furhter 끊어집니다 글 로빙 쉘 (더 일치하는 파일 또는 악화). 또한 참고 :이 sudo
적용 find
하지에 오직 xargs
.
이것을 시도하십시오 ( sudo
필요한 경우) :
find /opt -name 'filename-*.conf' -print0 | xargs -r0 sh -c 'echo "text_to_send" | tee "$0" "$@"' > /dev/null
경고 : tee
파일을 덮어 씁니다 ( >
그렇기 때문에 이것이 원하는 것 같습니다). tee -a
추가 하는 데 사용 합니다.
find -print0
그리고xargs -0
, 공상 파일 이름으로도 작동xargs -r
파일이 없으면 실행되지 않습니다.sh
내부 파이프를 다루고$0" "$@"
모든 파일 이름 (으로 표시xargs
)을sh
안전한 방식으로 명령 아래 에 전달합니다.tee
발견 된 하나 이상의 파일을 처리합니다.- 최종 리디렉션은
text_to_send
터미널에 나타나지 않도록 하는 것입니다.