
/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