(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