(5 jawaban)
Tutup 6 tahun yang lalu.
Ketika xargs mengarahkan output perintah pertama ke argumen perintah kedua dan tidak ada pilihan tentang argumen mana untuk elemen output mana, maka hanya ada satu cara, misalnya:
ls | xargs file # there are as many arguments as files in the listing,
# but the user does not have too choose himself
sekarang jika ada kebutuhan untuk memilih:
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.
Bagaimana Anda memberi tahu xargs untuk mengarahkan output standar dari perintah pertama ke dalam argumen pilihan Anda dari perintah kedua ?

Jawaban yang Diterima:
Anda dapat menggunakan -I untuk menentukan tempat penampung yang akan diganti dengan setiap nilai argumen yang diumpankan ke xargs . Misalnya,
ls -1 | xargs -I '{}' echo '{}'
akan memanggil echo sekali per baris dari ls keluaran. Anda akan sering melihat '{}' digunakan, mungkin karena sama dengan find tempatnya.
Dalam kasus Anda, Anda juga perlu melakukan pra-proses file output untuk mengekstrak nama file yang cocok; karena ada grep di sana kita bisa menggunakan awk untuk melakukan keduanya, dan sederhanakan file doa juga:
file * | awk -F: '/image/ { print $1 }' | xargs -I '{}' mv '{}' destination
Jika Anda memiliki GNU mv Anda bisa menggunakan -t untuk meneruskan beberapa file sumber:
file * | awk -F: '/image/ { print $1 }' | xargs mv -t destination