Posso informar ao find para não restaurar o diretório de trabalho inicial?

8

find não pode "restaurar o diretório de trabalho inicial" quando executado atrás de sudo -u se o diretório de trabalho inicial não estiver visível para o usuário encontrar as execuções como. Isso faz com que o find sempre imprima uma mensagem de aviso Permission denied irritante:

$ pwd
/home/myuser
$ sudo -u apache find /home/otheruser -writable
find: failed to restore initial working directory: Permission denied

Qual é a melhor maneira de impedir que a impressão seja encontrada nesta mensagem?

Um método é mudar para um diretório que o usuário do find possa restaurar, como cd / , antes de executar o find. Idealmente, gostaria apenas de uma opção para encontrar como --do-not-restore-initial-working-directory , mas acho que não está disponível. ;)

Estou usando principalmente distribuições baseadas em RedHat.

    
por Quinn Comendant 08.03.2017 / 02:55

1 resposta

5

A limpeza parece ser uma parte não opcional da execução de find .

link

em main em find.c

  cleanup ();
  return state.exit_status;
}

cleanup chamadas cleanup_initial_cwd

link

e cleanup_initial_cwd realmente mudam o diretório

link

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);
    }
}

Você pode tentar usar um script de shell que cd s em / primeiro, como sugeriu. (existem alguns problemas com este script, ele não pode manipular vários diretórios para pesquisar, por exemplo)

#!/bin/sh
path="$(pwd)/$1"
shift
cd /
exec find "$path" "$@"

Você também pode filtrar a saída de stderr para remover a mensagem indesejada

#!/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
    
por 08.03.2017 / 03:39

Tags