폴더에서 파일을 찾아서 /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터미널에 나타나지 않도록 하는 것입니다.