(5 Antworten)
Vor 6 Jahren geschlossen.
Wenn xargs die Ausgabe des ersten Befehls in das Argument des zweiten Befehls umleitet und es keine Wahl gibt, welches Argument für welches Element der Ausgabe verwendet wird, gibt es zum Beispiel nur einen Weg:
ls | xargs file # there are as many arguments as files in the listing,
# but the user does not have too choose himself
jetzt, wenn es eine Notwendigkeit für die Wahl gibt:
ls | xargs file | grep image | xargs mv..... # here the user has to
# deal with two arguments of mv, first for source second for destination, suppose your destination argument is set already by yourself and you have to put the output into the source argument.
Wie weisen Sie xargs an, die Standardausgabe des ersten Befehls in das Argument Ihrer Wahl des zweiten Befehls umzuleiten?
Akzeptierte Antwort:
Sie können -I
verwenden um einen Platzhalter zu definieren, der durch jeden Wert der Argumente ersetzt wird, die xargs
zugeführt werden . Zum Beispiel
ls -1 | xargs -I '{}' echo '{}'
ruft echo
auf einmal pro Zeile von ls
's Ausgang. Sie werden häufig '{}'
sehen verwendet, vermutlich weil es dasselbe ist wie find
Platzhalter.
In Ihrem Fall müssen Sie auch file
vorverarbeiten ’s-Ausgabe, um die übereinstimmenden Dateinamen zu extrahieren; da es ein grep
gibt dort können wir einfach awk
verwenden um beides zu tun und die file
zu vereinfachen Aufruf auch:
file * | awk -F: '/image/ { print $1 }' | xargs -I '{}' mv '{}' destination
Wenn Sie GNU mv
haben Sie könnten einfach -t
verwenden um mehrere Quelldateien zu übergeben:
file * | awk -F: '/image/ { print $1 }' | xargs mv -t destination