ほとんどの問題に対処する「xargs」の周りに「xargsL」という小さなポータブルラッパースクリプトを作成しました。
xargsとは異なり、xargsLは1行に1つのパス名を受け入れます。パス名には、(明らかに)改行またはNULバイト以外の任意の文字を含めることができます。
ファイルリストでの引用は許可またはサポートされていません。ファイル名には、あらゆる種類の空白、バックスラッシュ、バックティック、シェルワイルドカード文字などが含まれている可能性があります。xargsLはそれらをリテラル文字として処理します。害はありません。
追加のボーナス機能として、入力がない場合、xargsLはコマンドを1回実行しません。
違いに注意してください:
$ true | xargs echo no data
no data
$ true | xargsL echo no data # No output
xargsLに指定された引数は、xargsに渡されます。
以下は、 "xargsL" POSIXシェルスクリプトです。
#! /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
スクリプトを$ PATHのディレクトリに配置し、忘れずに
$ chmod +x xargsL
そこにスクリプトを実行可能にします。