특정 문자열이 포함된 내 디렉터리에 나타나는 /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