대부분의 문제를 해결하는 "xargs"주위에 "xargsL"이라는 작은 휴대용 래퍼 스크립트를 만들었습니다.
xargs와 달리 xargsL은 한 줄에 하나의 경로 이름을 허용합니다. 경로명에는 개행 또는 NUL 바이트를 제외한 모든 문자가 포함될 수 있습니다.
파일 목록에 인용이 허용되거나 지원되지 않습니다. 파일 이름에는 모든 종류의 공백, 백 슬래시, 백틱, 쉘 와일드 카드 문자 등이 포함될 수 있습니다. xargsL은 문자를 리터럴 문자로 처리합니다.
추가 보너스 기능으로, 입력이 없으면 xargsL은 명령을 한 번 실행 하지 않습니다 !
차이점에 유의하십시오.
$ 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
스크립트를 실행 가능하게 만듭니다.