find
sudo -u
最初の作業ディレクトリがユーザー検索実行に表示されない場合は、後続の実行で「初期作業ディレクトリを復元する」方法はありません。これにより、findは常に迷惑な結果を印刷します。許可が拒否されました警告メッセージ:
$ pwd
/home/myuser
$ sudo -u apache find /home/otheruser -writable
find: failed to restore initial working directory: Permission denied
findがこのメッセージを印刷しないようにする最善の方法は何ですか?
1つの方法は、検索を実行する前に検索ユーザーが回復可能なディレクトリ(たとえば)に変更することですcd /
。理想的には、たとえば検索オプションが欲しいが--do-not-restore-initial-working-directory
使用できないようです。 ;)
私は主にRedHatベースのディストリビューションを使用しています。
答え1
クリーンアップは実行のオプション部分ではないようですfind
。
main
からfind.c
cleanup ();
return state.exit_status;
}
cleanup
着信電話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
提案したように、まずシェルスクリプトを試してみることができます/
。 (このスクリプトには、検索用に複数のディレクトリを処理できないなど、いくつかの問題があります。)
#!/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