Saya membuat skrip pembungkus portabel kecil yang disebut "xargsL" di sekitar "xargs" yang membahas sebagian besar masalah.
Berlawanan dengan xargs, xargsL menerima satu pathname per baris. Nama path dapat berisi karakter apa pun kecuali (jelas) baris baru atau byte NUL.
Kutipan tidak diperbolehkan atau didukung dalam daftar file - nama file Anda dapat berisi semua jenis spasi putih, backslash, backticks, karakter wildcard shell dan sejenisnya - xargsL akan memprosesnya sebagai karakter literal, tidak ada salahnya dilakukan.
Sebagai fitur bonus tambahan, xargsL tidak akan menjalankan perintah sekali jika tidak ada input!
Perhatikan perbedaannya:
$ true | xargs echo no data
no data
$ true | xargsL echo no data # No output
Setiap argumen yang diberikan kepada xargsL akan diteruskan ke xargs.
Berikut ini skrip shell POSIX "xargsL":
#! /bin/sh
# Line-based version of "xargs" (one pathname per line which may contain any
# amount of whitespace except for newlines) with the added bonus feature that
# it will not execute the command if the input file is empty.
#
# Version 2018.76.3
#
# Copyright (c) 2018 Guenther Brunthaler. All rights reserved.
#
# This script is free software.
# Distribution is permitted under the terms of the GPLv3.
set -e
trap 'test $? = 0 || echo "$0 failed!" >& 2' 0
if IFS= read -r first
then
{
printf '%s\n' "$first"
cat
} | sed 's/./\\&/g' | xargs ${1+"$@"}
fi
Masukkan skrip ke beberapa direktori di $ PATH Anda dan jangan lupa
$ chmod +x xargsL
skrip di sana untuk membuatnya dapat dieksekusi.