
Ich versuche, in meinem /tmp
Verzeichnis 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