파이프 라인 된 Sed는 Find "-exec"에서 호출 될 때 Bash 명령 대체 내에서 찾은 파일 이름에서 작동하지 않습니다.

Wreath B 스팸

어떤 경우에는 'find', 'bash'및 'sed'가 예상대로 작동하지 않는 것처럼 보입니다.

다음 예제는 먼저 'sample.txt'파일을 생성 한 다음 파일을 찾아 마지막으로 '-exec'명령으로 처리해야합니다. 실행 된 명령은 찾은 파일 이름, 테스트 표본 및 수정 된 파일 이름을 인쇄합니다. 'sed'명령 자체는 'txt'를 'TXT'로 바꾸는 데 사용됩니다.

touch sample.txt
find ./ -maxdepth 1 -name "*.txt" -exec echo {} $(echo Specimen_before.txt {} Specimen_after.txt |sed -e "s/txt/TXT/g") \;

예상되는 출력은 다음과 같습니다.

./sample.txt Specimen_before.TXT ./sample.TXT Specimen_after.TXT

대신 다음을 생성합니다.

./sample.txt Specimen_before.TXT ./sample.txt Specimen_after.TXT

(이 예제는 동일한 결과로 역 따옴표 '`'를 통해 구식 명령 대체로도 테스트되었습니다)

내가 무엇을 잘못하고 있지?

Kusalananda

명령 대체는 find시작 하기 전에 실행 됩니다. 실행 된 실제 명령 (대체, 확장 및 따옴표 제거 등)은 다음과 같습니다.

find ./ -maxdepth 1 -name *.txt -exec echo {} Specimen_before.TXT {} Specimen_after.TXT ;

당신이 실행해야하는 경우 아무것도 공상 (파이프 또는 여러 명령)과를 -exec, 다음을 할 수있는 별도의 쉘을 시작 :

find . -maxdepth 1 -type f -name '*.txt' \
    -exec sh -c 'printf "%s " "$1"; printf "%s %s %s\n" "before.txt" "$1" "after.txt" | sed "s/txt/TXT/g"' sh {} ';'

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관