POSIXとしてのアクセス許可で読み取り可能ですか?


0

対象システム:LinuxおよびOSX。オリジナル コード これはUbuntu 16.04では動作しますが、OS Xでは動作しませんが、うまくいきません。 POSIX 規格

gfind ~ ! -readable -prune -o -type f -name "*.tex" 

どこで

  • ! についてです プライマリの否定。単項NOT演算子
  • -readable TODOこれはPOSIXではないようです
  • -prune についてです プライマリは常に真と評価されます。ディレクトリであれば、findは現在のパス名を降順にしないようにします。 -depthプライマリを指定した場合、-pruneプライマリは無効になります。
  • -o についてです 原色の交代OR演算子最初の式が真の場合、2番目の式は評価されません。 そうでなければ、これです。
  • -type 型については、こちらのファイル f
  • -name filenameについては、ここ *.tex

出力

gfind: paths must precede expression: type
Usage: gfind [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

プロポーザルを修正

つかいます -perm 0744 の代わりに -readable しかしそれが同等かどうかわからない

gfind ~ ! -perm 0744 -prune -o -type f -name "*.tex" 

出力: /Users/masi。予想される出力:.texファイルのリスト。


どのようにあなたは読みやすくするために正しくfindのパーミッションを設定することができますか?


4
さてあなたはどこから見つけたのですか? ではない OSXの一部(一般的にあなたの他の投稿からのLinuxはUnixではありません)あなたがLinuxに固執したいのであればそれらは異なります:)あなたが一般に同じことを望むならGNU拡張を使わないでください
Mark

4
私が言ったように、GNU拡張を使わない - いくつか異なることがあるがBSDは通常サブセットである - すなわちLinuxが正しい方法であると仮定しないでください、
Mark

1
あなたが本当に移植可能なスクリプトを書きたいのなら、私はあなたがここから始めることを勧めます - pubs.opengroup.org/onlinepubs/009695399/utilities/contents.html シェルとそのユーティリティのPOSIX標準を学ぶため。私がOS Xで書いたほとんどのスクリプトはLinuxで動くでしょう。
fd0

私はあなたにその仕事をさせるつもりです。を追加 -user オプション(それは変数になることができます) -perm 読みやすいです。
fd0

1
行列で find . -perm +0666 たとえば、所有者が呼び出し元ではなく、その所有者だけがファイルを読み取ることができるファイルをリストすることができます。 -perm ファイルの分類に関係なくパーミッションビットを読み込みます。だから、建物 find のロジックは、 -user そして -group と一緒にオプション -perm オプションもちろん、これは過度に複雑でデバッグが困難な場合があります。テストする時間があれば、解決策を投稿します。
fd0

回答:


1

最初の二重否定はこれをかなり複雑にします。使うだけ

gfind . -readable -type f -name '*.tex'

うまくいくはずです。

シモンズ:または find . -perm +0666 -type f -name '*.tex' デフォルトの find


二重否定を指摘していただきありがとうございます。私はいつもそれを念頭に置いていたが、それを解決する方法を見つけることができませんでした。
Léo Léopold Hertz 준영

fd0がどういう意味なのか知っていますか -user 彼のコメントでここにオプション?私はまだそれについて考えていますが、私は理解することができません。
Léo Léopold Hertz 준영

1
見ないで -user (読みやすさではなく、所有権をチェックする)これが役立ちます。しかし、おそらく@ fd0はそれに何らかの光を投げることができます。
nohillside

0

使用しようとした後 find のオプション -user-group、そして -permfind コマンドはすぐに管理不能になりました。インラインスクリプト find シェルを使う -r test 2つのオペレーティングシステム間で移植可能です。

find ~ -type f -name '*.tex' -exec sh -c 'for file
do
    [ -r "$file" ] && echo "$file"
done
' sh {} + 2>/dev/null

あなたは何かを捨てています /dev/null。どうして?
Léo Léopold Hertz 준영

@マシさて、あなたはなぜ知っているべきです。あなたは以前に同様の質問をしました - stackoverflow.com/questions/762348/…
fd0

私はそのようなことを捨てるのは好きではないので私はそれを尋ねました。それを処理し、そもそもそのようなことを防ぐ方がはるかに良いです。
Léo Léopold Hertz 준영
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.