Innerer Funktionsaufruf mit xargs-Parametern

Innerer Funktionsaufruf mit xargs-Parametern

Ich versuche, in meinem /tmpVerzeichnis eine Datei zu erstellen, die aus jeder Datei eine bestimmte Zeichenfolge enthält.

Das Problem ist, dass der Aufruf von basename {}nicht zu funktionieren scheint. Weder dieser noch echo basename {}.

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

Weiß jemand, wie ich die Basename-Funktion für den Xargs-Parameter ausführen kann?

Antwort1

Versuche dies:

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

Antwort2

Das Problem besteht darin, dass die Backticks zu früh erweitert werden (d. h. nicht einmal für jedes an xargs gesendete Argument). Es gibt vielleicht einen besseren Weg, aber Sie sollten mit einer expliziten Bash-Schleife auskommen:

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

verwandte Informationen