xargs 매개변수를 사용한 내부 함수 호출

xargs 매개변수를 사용한 내부 함수 호출

/tmp특정 문자열이 포함된 각 파일의 내 디렉터리에 파일이 발생하도록 만들려고 합니다 .

문제는 호출이 basename {}작동하지 않는 것 같다는 것입니다. 이것도 아니고, echo basename {}.

grep -R 'mystring' . | cut -d: -f 1 | uniq | xargs -n 1 -I {} touch /tmp/`basename {}`

xargs 매개변수에서 basename 함수를 실행하는 방법을 아는 사람이 있나요?

답변1

이 시도:

grep -R 'mystring' . | cut -d: -f 1 | uniq| xargs -n 1 -I {} -t -i ksh  -c "touch /tmp/$(basename {})"

답변2

문제는 역따옴표가 너무 일찍 확장된다는 것입니다(즉, xargs로 전송된 각 인수에 대해 한 번도 확장되지 않음). 더 좋은 방법이 있을 수도 있지만 명시적인 bash 루프를 사용하여 벗어날 수 있습니다.

grep -R 'mystring' . | cut -d: -f 1 | uniq | while read f; do touch "/tmp/`basename $f`"; done

관련 정보