
Я пытаюсь создать файл, находящийся в моем /tmp
каталоге для каждого файла, содержащего определенную строку.
Проблема в том, что вызов, basename {}
похоже, не работает. Ни это, ни echo basename {}
.
grep -R 'mystring' . | cut -d: -f 1 | uniq | xargs -n 1 -I {} touch /tmp/`basename {}`
Кто-нибудь знает, как мне заставить функцию basename выполниться для параметра xargs?
решение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