태그 보관물: bash

bash

파일을 찾아서 텍스트를 보내십시오 파일을 찾아서 /opt텍스트를

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

답변