(5 odpovědí)
Uzavřeno před 6 lety.
Když xargs přesměruje výstup prvního příkazu do argumentu druhého příkazu a neexistuje žádná volba, který argument pro který prvek výstupu, pak existuje pouze jeden způsob, například:
ls | xargs file # there are as many arguments as files in the listing,
# but the user does not have too choose himself
nyní, pokud existuje potřeba volby:
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.
Jak řeknete xargs, aby přesměroval standardní výstup prvního příkazu do vámi zvoleného argumentu druhého příkazu?

Přijatá odpověď:
Můžete použít -I k definování zástupného symbolu, který bude nahrazen každou hodnotou argumentů přiváděných do xargs . Například,
ls -1 | xargs -I '{}' echo '{}'
zavolá echo jednou na řádek z ls výstup. Často uvidíte '{}' pravděpodobně proto, že je to stejné jako find zástupný symbol.
Ve vašem případě musíte také předběžně zpracovat file výstup pro extrahování odpovídajících názvů souborů; protože existuje grep tam můžeme použít pouze awk udělat obojí a zjednodušit file také vyvolání:
file * | awk -F: '/image/ { print $1 }' | xargs -I '{}' mv '{}' destination
Pokud máte GNU mv stačí použít -t pro předání více zdrojových souborů:
file * | awk -F: '/image/ { print $1 }' | xargs mv -t destination