我围绕“ xargs”创建了一个名为“ xargsL”的小型可移植包装脚本,该脚本解决了大多数问题。
与xargs相反,xargsL每行接受一个路径名。路径名可以包含任何字符(除了(显然)换行符或NUL字节除外)。
文件列表中不允许或不使用引号-您的文件名可能包含各种空白,反斜杠,反引号,shell通配符等-xargsL会将它们视为文字字符,不会造成任何损害。
作为附加功能,xargsL 不会如果没有输入运行该命令一次!
注意区别:
$ true | xargs echo no data
no data
$ true | xargsL echo no data # No output
给xargsL的任何参数都将传递给xargs。
这是“ xargsL” POSIX Shell脚本:
#! /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
使其可执行的脚本。