(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