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

관련 정보