Это может быть сделано от find
непосредственно использование -exec
:
find . -name "*.xml" -type f -exec xmllint --output '{}' --format '{}' \;
Чему передается -exec
будет вызван однажды на файл, найденный с шаблонными параметрами {}
будучи замененным текущим именем файла. \;
на конце команды находки только завершает строку.
Использование xargs
не действительно необходимо в этом случае, потому что мы должны вызвать xmllint
однажды на файл как оба входные и выходные имена файлов должны быть указаны в том же вызове.
xargs
был бы необходим, если бы команда, передаваемая по каналу к от находки, работала над несколькими файлами за один раз, и тот список был длинен. Вы не можете сделать этого в этом случае, поскольку необходимо передать единственное имя файла --output
опция xmllint
. Без xargs
Вы могли заканчивать со "Списком аргументов слишком долго" ошибка при обработке большого количества файлов. xargs
также строки замены файла поддержек с -I
опция:
find . -name "*.xml" -type f | xargs -I'{}' xmllint --output '{}' --format '{}'
Сделал бы то же как find -exec
команда выше. Если какая-либо из Ваших папок будет иметь нечетные символы в подобных пробелах, то необходимо будет использовать -0
опции find
и xargs
. Но использование xargs
с -I
подразумевает опцию -L 1
что означает только процесс 1 файл за один раз так или иначе, таким образом, можно также непосредственно использовать find
с -exec
.
В системе ELF базовый файл является почти наверняка допустимым файлом ELF.
$ readelf -a core
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: CORE (Core file)
Machine: Intel 80386
[...]
Платформа определенное количество "примечаний" добавляется к сегменту NOTES так, чтобы отладчик мог найти свой путь вокруг, например, для Соляриса, видит ядро (4), и Вы отметите NT_UTSNAME
структура, которая содержит структуру данных от uname(2)
syscall. elfdump -n
путь состоит в том, чтобы считать, что, но насколько я знаю, Солярисом является единственная ОС, которая делает это (и я подозреваю только Солярис 11 elfdump
работы, как надеялся).
Простое, хотя немного трудный и не - гарантируемый путь должен попытаться ловить рыбу HOST
или HOSTNAME
переменные (установленный некоторыми сценариями запуска и оболочками, bash
по крайней мере, наборы HOSTNAME
) из среды дампа ядра. Можно сделать это с gdb
, хотя Вам нужен исходный двоичный файл:
$ gdb /usr/bin/sleep core
[... snip ...]
(gdb) print (char ***) &environ
$1 = (char ***) 0x600bf8
(gdb) print $1[0][0]@10
$2 = {0x7fffffffd9c9 "HOST=myhostname", 0x7fffffffd9d9 "TERM=screen",
0x7fffffffd9e5 "SHELL=/bin/csh",
[...]
Это печатает блок строк от environ
символ. Хотя это - ужасный взлом strings | grep HOSTNAME=
просто мог бы работать также.
Так, короткий ответ на "Является там способом узнать, какой хост генерировал тот базовый файл": не легко, и не надежно на Linux.
FWIW, соответствующий код coredump Linux находится в fs/binfmt_elf.c
, и существует рычаг для разрешения дополнительных "примечаний" посредством ARCH_HAVE_EXTRA_ELF_NOTES
, в настоящее время только используемый на PowerPC.)
Лучший план в целом состоит в том, чтобы использовать sysctl для установки базового имени файла на каждом клиенте, как предложено @jlliagre:
sysctl kernel.core_pattern="%h-%t-%e.core"
(sysctl
и рыться вокруг в /proc
эквивалентны здесь, я предпочитаю sysctl
так как изменения могут быть сохранены зарегистрированными в /etc/sysctl.conf
и это используется на *системы BSD также.)
Вы могли бы работать strings core.1234
и найдите, появляется ли имя хоста где-нибудь. Некоторые Ose как Солярис действительно помещают имя хоста в базовый заголовок, но насколько я знаю, Linux не делает этого так strings
метод был бы ненадежен с ним.
Лучший подход должен был бы настроить NFS
клиенты для помещения их имен хостов в базовые имена файлов путем установки /proc/sys/kernel/core_pattern
файл или некоторое распределение определенная конфигурация, если core_pattern
обратитесь к исполняемому файлу.
strings | grep HOSTNAME=
то, что я начал использовать. Это - интерактивное использование; таким образом, хорошо, если это приводит часть к сбою времени. – luispedro 28.11.2013, 16:24