0

ここでの私の目標は、ファイル システム全体を実行し、絶対パス、ファイル所有者、およびファイル グループを取得して、後でスクリプトで使用できるようにファイルに保存し、「既知の」ファイルに所有権を再適用することです。

注: 「acl」パッケージをインストールする必要があります。

これが私がこれまでに持っているものです:

find / -exec ./fileog.sh {} \;

./fileog.sh の内容:

getfacl -R "$2" | awk 'NR==1, NR==3 {print $3}' | paste -s -d ',' >> ./ogindex.txt

問題は、次のエラーが表示されることです。

getfacl: : No such file or directory

しかし、これを行うだけでうまくいきます:

find / -exec getfacl -R "$2" {} \;

これを自分で試してください:)

getfacl -R ./some.file | awk 'NR==1, NR==3 {print $3}' | paste -s -d ','

私は何が欠けていますか?

4

2 に答える 2

2

実行fileog.shfindて、彼に 1 つの引数 (ファイル名、{})のみを与えます。

-exec ./fileog.sh {} \;

このファイル名は、スクリプト内では$1ではなくとしてアクセスできます$2

$1スクリプトの代わりに を記述$2するか、欠落している引数を のスクリプトに追加する必要があります-exec

のフラグメントogeindex.txt:

etc,root,root
etc/ucf.conf,root,root
etc/gshadow,root,shadow
etc/sudoers.d,root,root
etc/sudoers.d/README,root,root
etc/motd.tail,root,root
于 2012-07-24T16:17:53.410 に答える
0

との両方findを使用するべきではありませんgetfacl -R。または、より慎重に使用する必要があります。

findすでに再帰しているので、この方法で各ファイルを複数回ヒットしています。

私はこの方法で問題を解決します:

find / -exec stat -c '%n,%U,%G' {} \; >> ./ogindex.txt

リーディングストリップが必要な場合/、これはほんの少しの後処理になります。

注:;statを介したフォーマットをサポートしていると想定します。-cのすべてのバージョンstatが同じというわけではありません。

また、この情報をこの形式で保存しないことを強くお勧めします。ファイル名にコンマが含まれているとどうなりますか?user,group,filename2番目のコンマ以降のすべてをファイル名として扱うことができるため、使用する方が安全です。もちろん、これは細工されたファイル名に対してまだ脆弱です。

于 2012-07-24T16:42:04.633 に答える