Sorunların çoğunu ele alan "xargs" etrafında "xargsL" adlı küçük bir taşınabilir sarmalayıcı komut dosyası oluşturdum.
XargsL'nin aksine, xargsL her satıra bir yol adı kabul eder. Yol adları (açıkça) yeni satır veya NUL bayt dışında herhangi bir karakter içerebilir.
Dosya listesinde alıntı yapılmasına izin verilmez veya desteklenmez - dosya adlarınız her türlü boşluk, ters eğik çizgi, ters tırnak, kabuk joker karakterleri ve benzerlerini içerebilir - xargsL bunları değişmez karakterler olarak işleyecektir, zarar verilmez.
Bir avantaj özelliği olarak, xargsL olacak değil hiçbir giriş olmazsa bir kez komutunu çalıştırın!
Farkı not edin:
$ true | xargs echo no data
no data
$ true | xargsL echo no data # No output
XargsL öğesine verilen tüm argümanlar xargs'e iletilecektir.
İşte "xargsL" POSIX kabuk betiği:
#! /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
Komut dosyasını $ PATH içindeki bir dizine koyun ve unutmayın
$ chmod +x xargsL
orada çalıştırılabilir hale getirmek için komut dosyası.