손으로 실행하는 두 개의 개별 명령을 단일 bash 스크립트로 통합하는 스크립트를 작성하려고합니다.
첫 번째 명령은 특정 이름과 크기를 가진 파일에 대한 간단한 찾기입니다.
find /some/path -type f -name file.pl -size +10M
이렇게하면 일치하는 여러 파일과 전체 경로가 생성됩니다. 그런 다음 이러한 경로를 다음 스크립트에 대한 인수로 for 루프에 직접 복사합니다.
for path in /some/path/1/file.pl /some/path/2/file.pl /some/path/3/file.pl ; do perl /my/script.pl $path ; done
이것을 단일 쉘 스크립트로 가져 오는 것은 쉽지만 어려움을 찾는 것 같습니다.
이것이 -exec
술어의 용도입니다.
find /some/path -type f -name file.pl -size +10M -exec perl /my/script.pl {} \;
당신이 원하는 경우 쉘이 의 출력에 따라 명령을 실행 find
, 그 다음은해야 할 것이다 bash
/ zsh
당신이 신뢰할 수 있도록하려면 특정를 :
zsh
:
IFS=$'\0'
for f ($(find /some/path -type f -name file.pl -size +10M -print0)) {
/my/script.pl $f
}
에서는 zsh
간단하게 다음을 수행 할 수 있습니다.
for f (./**/file.pl(.LM+10)) /my/script.pl $f
bash
/zsh
while IFS= read -rd '' -u3 file; do
/my/script.pl "$file"
done 3< <(find /some/path -type f -name file.pl -size +10M -print0)
bash
다른 POSIX 셸 에서 수행하는 작업은 피하십시오.
for file in $(find...)
또는 적어도 필드 구분자를 줄 바꿈으로 고정하고 globbing을 비활성화하여 덜 나쁘게 만드십시오.
IFS='
'; set -f; for file in $(find...)
(개행 문자를 포함하는 파일 경로에 대해서는 여전히 실패합니다).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다