findに最初の作業ディレクトリを復元しないように指示できますか?


8

findsudo -u最初の作業ディレクトリがユーザーに表示されない場合、後ろで実行すると「最初の作業ディレクトリを復元」できません。これにより、findは常に迷惑なPermission denied警告メッセージを出力します。

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

findがこのメッセージを印刷しないようにする最良の方法は何ですか?

1つの方法は、findを実行するcd /前に、findユーザーが復元できるディレクトリ(など)に変更することです。理想的には、などの検索オプション--do-not-restore-initial-working-directoryが欲しいのですが、それは利用できないと思います。;)

私は主にRedHatベースのディストリビューションを使用しています。

回答:


5

クリーンアップはの実行のオプションではない部分のようですfind

https://github.com/Distrotech/findutils/blob/e6ff6b550f7bfe41fb3d72d4ff67cfbb398aa8e1/find/find.c#L231

の中mainfind.c

  cleanup ();
  return state.exit_status;
}

cleanup 呼び出し cleanup_initial_cwd

https://github.com/Distrotech/findutils/blob/e6ff6b550f7bfe41fb3d72d4ff67cfbb398aa8e1/find/util.c#L534

そしてcleanup_initial_cwd実際にディレクトリを変更します

https://github.com/Distrotech/findutils/blob/e6ff6b550f7bfe41fb3d72d4ff67cfbb398aa8e1/find/util.c#L456

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入るシェルスクリプトを使用してみることができ/ます。(このスクリプトにはいくつか問題があります。たとえば、検索する複数のディレクトリを処理することはできません)

#!/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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.