Jawaban:
Beberapa versi sort
memiliki -z
opsi, yang memungkinkan untuk catatan yang diakhiri dengan nol.
find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand
Selain itu, Anda juga dapat menulis skrip tingkat tinggi untuk melakukannya:
find folder1 folder2 -name "*.txt" -print0 | python -c 'import sys; sys.stdout.write("\0".join(sorted(sys.stdin.read().split("\0"))))' | xargs -r0 myCommand
Tambahkan -r
opsi untuk xargs
memastikan bahwa myCommand
itu dipanggil dengan argumen.
-t \0
opsi untuk sort (yang merupakan -z
sinonim)
|sort
solusi ini adalah Anda tidak dapat menggunakannya -exec
lagi. OK, meskipun dimungkinkan untuk menulis ulang pernyataan Anda -exec
agar dapat berfungsi xargs
, pertanyaannya adalah, bagaimana dengan "skrip mini" ? ( sh -c ...
) Saya tidak akan memanggil hal sepele itu untuk mengubah skrip mini 'sh -c' dengan beberapa perintah sehingga dapat bekerja dengan xargs
(jika mungkin sama sekali, yaitu)
printf %s\\n a b c d e | xargs -n3 sh -c 'printf %s, "$@"; printf \\n' x
Saya pikir Anda perlu -n
bendera untuk mengurutkan #
Menurut jenis manusia:
-n, --numeric-sort
compare according to string numerical value
sunting
Print0 mungkin ada hubungannya dengan ini, saya baru saja menguji ini. Keluarkan print0, Anda bisa null menghentikan string dengan menggunakan -z
flag
print0
tampaknya memisahkan ruang dari nama file yang saya butuhkan untuk menyampaikan perintah saya, sayangnya
Jika Anda telah menginstal GNU Parallel http://www.gnu.org/software/parallel/ Anda dapat melakukan ini:
find folder1 folder2 -name "*.txt" -print |
sort |
parallel myCommand
Anda dapat menginstal GNU Parallel hanya dengan:
wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem
Tonton video intro untuk GNU Parallel untuk mempelajari lebih lanjut: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
.
berbeda ... Dengansort
itu berakhir di akhir daftar ... denganpython
itu agak ke atas. (mungkin python macam denganLC_COLLATE=C
)