Saya ingin mengelompokkan gambar jpeg dengan nomor ganjil dan nomor genap. Jadi saya memang suka mengikuti:
$ mkdir odd
$ mkdir even
$ find . -regextype posix-egrep -regex ".*[13579].jpg$" -print0 | xargs -i -0 mv {} odd/
$ find . -regextype posix-egrep -regex ".*[02468].jpg$" -print0 | xargs -i -0 mv {} even/
Ini bekerja dengan baik. Dan saya menulis hal yang sama dalam skrip shell.
#!/bin/bash
mkdir odd
mkdir even
find . -regextype posix-egrep -regex ".*[13579].jpg$" -print0 | xargs -i -0 mv {} odd/
find . -regextype posix-egrep -regex ".*[02468].jpg$" -print0 | xargs -i -0 mv {} even/
Tapi itu mengembalikan kesalahan berikut:
xargs: Warning: a NUL character occurred in the input. It cannot be passed through in the argument list. Did you mean to use the --null option?
Mengapa skrip ini tidak berfungsi? Dan bagaimana cara memperbaikinya?
linux
bash
shell-script
xargs
ironsand
sumber
sumber
-i
pilihan karena saya ingin menggunakan{}
ekspresi dalam argumen xargs. Apakah itu tidak perlu?Jawaban:
Salah satu sumber yang mungkin untuk hal ini adalah Anda mungkin memiliki dua versi berbeda
xargs
dengan sintaks opsi yang berbeda, dan karena perbedaan $ PATH, skrip menggunakan yang berbeda dari sesi interaktif Anda. Anda dapat memeriksa ini dengan cukup mudah dengan menulis skrip lain untuk melihat versi apa yang ditemukannya:... lihat apa yang dicetak skrip, lalu jalankan perintah yang sama (atau hanya
which xargs
) secara interaktif dan lihat apakah Anda mendapatkan hasil yang berbeda. Jika mereka keluar berbeda, mungkin ada sesuatu di skrip inisialisasi shell Anda (~ / .bashrc, ~ / .bash_profile, dll) yang menyebabkannya.sumber