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


0

폴더에서 파일을 찾아서 /opt텍스트를 보내려고합니다. 나는 다음 구문을 시도했다 :

sudo find /opt -name filename-*.conf | xargs -I '{}' echo "text_to_send" > '{}' \;

불행히도 그 후 {}텍스트가 포함 된 파일을 찾습니다 . 나는 사용하여 시도 '{}'뿐만 아니라 {}, "{}", \{\}하지만, 명령,하지만 아무것도 찾을 파일 이름에 대한 자리 표시 자로서 제대로 작동 것 같다. 올바른 구문은 무엇입니까?

답변:


0

이 시도:

sudo find /opt -name filename-*.conf -exec bash -c 'echo "text_to_send" > {}' \;

bash -c리디렉션을 넣어하기 위해 필요 >에 대한 따옴표 find -exec.


고마워,이 대답은 콘솔에서 실행하면 기술적으로 괜찮지 만 불행히도 어떤 이유로 든 방랑 파일에 사용 된 프로비저닝 컨텍스트에서 작동하지 않았습니다. 방랑자는 -exec에 대한 속성이 없다고 불평했습니다.
Piotr G

0

나는 >현재 껍질에서 해석된다고 생각한다 . 동일하게 적용 *당신이 일어날 경우, 즉 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터미널에 나타나지 않도록 하는 것입니다.

이 솔루션은 방대한 파일에서도 작동하지만를 text_to_send포함하는 데 약간의 문제가 " "있었으며 결국 지워졌습니다. 결국에는 다른 솔루션에 의지해야했지만 어쨌든 좋은 통찰력을 얻었습니다. 감사합니다.
Piotr G
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.