Если 30000 файлов расположены в dir
, который является подкаталогом текущего каталога:
xargs -I XX cat dir/XX <file1 >result.txt
Это объединит файлы, перечисленные в file1
, и запишет результат в файл с именем result.txt
.
xargs
прочитает имена файлов из file1
и выполнит cat
для каждого файла.-I XX
указывает xargs
заменить XX
в команде cat dir/XX
именем файла.
Вы также можете использовать
cd dir
xargs cat <../file1 >../result.txt
, что может быть быстрее, но дает тот же результат. Разница в том, что вместо того, чтобы запускать cat
один раз для каждого файла по отдельности, cat
вызывается с максимально возможным количеством имен файлов.
Обычно, чтобы внедрить переменную окружения для команды, вы помещаете присвоение имени перед командой, подобной этой:
VARIABLE=value bash -c 'echo "$1 $VARIABLE"' bash hello
Это запускает bash -c 'echo "$VARIABLE"' bash hello
и устанавливает VARIABLE
в строку value
в среде этой команды. В этом случае команда напечатает hello value
(, где hello
исходит из первого аргумента командной строки скрипта строки -, а value
исходит из переменной окружения ).
Сset -o keyword
(илиset -k
)вbash
(это не -стандартная опция оболочки ), назначение может происходить в любом месте командной строки:
$ set -k
$ bash -c 'echo "$1 $VARIABLE"' bash hello VARIABLE=value
hello value
$ bash -c 'echo "$1 $VARIABLE"' bash VARIABLE=value hello
hello value
$ bash -c 'echo "$1 $VARIABLE"' VARIABLE=value bash hello
hello value
$ bash -c VARIABLE=value 'echo "$1 $VARIABLE"' bash hello
hello value
$ bash VARIABLE=value -c 'echo "$1 $VARIABLE"' bash hello
hello value
Я никогда не видел, чтобы эта опция использовалась «в дикой природе», и я предполагаю, что она используется очень редко при очень специфических обстоятельствах, поскольку она радикально меняет способ анализа команд.