findコマンドをls -ltと組み合わせてみてください。

findコマンドをls -ltと組み合わせてみてください。

特定の権限で変更された最新のディレクトリの上位5つを見つけようとします。

私の検索コマンドは次のとおりです。

find -d -perm -a+rwx

それで組み合わせようとしています。

ls -lt

検索結果を取得し、最後に変更されたファイルが一番上になるように長いリストに配置します。

私が試したすべてがうまくいきません。結局 total=0 になります。

答え1

zsh-ixly:

ls -ltd -- **/*(/omf777[1,5])

これは、再帰的に返された最初の5つのファイル()に対して行われますlsl長いリスト、再編集時間でソートt-d内容ではなくディレクトリのみをリストするフラグを含む)。[1,5]zsh グローバルモード変更時間()に基づいてソートして、/777の権限()を持つディレクトリ()を一致させます。f777om

隠しファイルとディレクトリは無視されます。Dこれを考慮するには、glob修飾子を追加してください。

答え2

.iestatの代わりに使用する:ls

find . -type d -perm -a+rwx -exec stat -c "%Y %n" '{}' ';' | sort -rn | tail -n 5

答え3

Bash(またはZsh)とGNUツールがインストールされている場合は、すべてのファイル名を処理できます。

while IFS= read -r -d '' -u 9
do
    printf '%q\n' "${REPLY#* }"
done 9< <(
  find . -type d -perm -a+rwx -printf '%T@ %p\0' |
    sort --general-numeric-sort --zero-terminated |
    head --lines=5 --zero-terminated)

外部から内部に読み込むと、次の操作が実行されます。

  1. 世界中に公開されたディレクトリを見つけてください。
  2. 各ディレクトリに対して修正タイムスタンプとファイルパス、その後にNUL文字を印刷します。
  3. 最初の列なので、数値順に、つまりタイムスタンプに基づいてリストをソートします。
  4. 0で終わる最初の5つの項目を取得します。
  5. このリストを1つずつ読んでください。
  6. 各項目からタイムスタンプを削除します。
  7. 各ファイル名の参照バージョンを印刷します。

答え4

find伝統的に/伝統的に次のようになりますxargs

find …something… -print0 | xargs -0 …dosomething…

Qnパイプラインに従って実行する必要がある操作xargs -0 ls -dlt

☝️注:BSD 1バージョンはパイプ入力なしでは実行されませんが、GNUの場合はお勧めxargsします-rman xargs

__

1 - コメントで指摘したように、OpenBSDは例外です(OpenBSDの場合はしばしばそうです);)

関連情報