어떤 경우에는 '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
(이 예제는 동일한 결과로 역 따옴표 '`'를 통해 구식 명령 대체로도 테스트되었습니다)
내가 무엇을 잘못하고 있지?
명령 대체는 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] 삭제
몇 마디 만하겠습니다