Очистка, похоже, является неопциональной частью выполнения find
.
in main
in find.c
cleanup ();
return state.exit_status;
}
cleanup
calls cleanup_initial_cwd
и cleanup_initial_cwd
фактически изменяет каталог
static void
cleanup_initial_cwd (void)
{
if (0 == restore_cwd (initial_wd))
{
free_cwd (initial_wd);
free (initial_wd);
initial_wd = NULL;
}
else
{
/* since we may already be in atexit, die with _exit(). */
error (0, errno,
_("failed to restore initial working directory"));
_exit (EXIT_FAILURE);
}
}
Вы можете попробовать использовать сценарий оболочки, который cd
s в /
сначала, как вы предложили. (есть некоторые проблемы с этим скриптом, он не может обрабатывать несколько каталогов для поиска, например)
#!/bin/sh
path="$(pwd)/$1"
shift
cd /
exec find "$path" "$@"
Вы также можете фильтровать вывод stderr, чтобы удалить ненужное сообщение
#!/bin/sh
exec 3>&2
exec 2>&1
exec 1>&3
exec 3>&-
3>&2 2>&1 1>&3 3>&- find "$@" | grep -v "^find: failed to restore initial working directory"
# not sure how to recover find's exit status
exit 0
Решение: пришлось явно настроить все остальные средства, за исключением local7
:
kern,user,mail,daemon,auth,syslog,lpr,news,uucp.info /var/adm/ras/syslog.caa rotate time 10m files 10 compress
Некоторые из них, вероятно, можно удалить ( news, uucp
).