特定の権限で変更された最新のディレクトリの上位5つを見つけようとします。
私の検索コマンドは次のとおりです。
find -d -perm -a+rwx
それで組み合わせようとしています。
ls -lt
検索結果を取得し、最後に変更されたファイルが一番上になるように長いリストに配置します。
私が試したすべてがうまくいきません。結局 total=0 になります。
答え1
zsh-ixly:
ls -ltd -- **/*(/omf777[1,5])
これは、再帰的に返された最初の5つのファイル()に対して行われますls
(l
長いリスト、再編集時間でソートt
、-d
内容ではなくディレクトリのみをリストするフラグを含む)。[1,5]
zsh グローバルモード変更時間()に基づいてソートして、/
777の権限()を持つディレクトリ()を一致させます。f777
om
隠しファイルとディレクトリは無視されます。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)
外部から内部に読み込むと、次の操作が実行されます。
- 世界中に公開されたディレクトリを見つけてください。
- 各ディレクトリに対して修正タイムスタンプとファイルパス、その後にNUL文字を印刷します。
- 最初の列なので、数値順に、つまりタイムスタンプに基づいてリストをソートします。
- 0で終わる最初の5つの項目を取得します。
- このリストを1つずつ読んでください。
- 各項目からタイムスタンプを削除します。
- 各ファイル名の参照バージョンを印刷します。
答え4
find
伝統的に/伝統的に次のようになりますxargs
。
find …something… -print0 | xargs -0 …dosomething…
Qnパイプラインに従って実行する必要がある操作xargs -0 ls -dlt
☝️注:BSD 1バージョンはパイプ入力なしでは実行されませんが、GNUの場合はお勧めxargs
します-r
。man xargs
__
1 - コメントで指摘したように、OpenBSDは例外です(OpenBSDの場合はしばしばそうです);)