ディレクトリ内のすべてのファイルを一覧表示し、自分が所有するファイルのみを表示するために使用できる最適なシェル コマンド「ワン ライナー」は何でしょうか。
答え1
短いワンライナーは次のようになります。
find . -maxdepth 1 -user $USER
現在のディレクトリを検索する場合は、 を省略できます.
。 が使用可能かどうかわからない場合は、または$USER
に置き換えることができます。$LOGNAME
$(whoami)
ファイルの詳細を表示するには追加します-ls
。例:
find / -maxdepth 1 -user root -ls
カスタムフラグを指定したい場合は、ls
次のように使用できます-exec
:
find / -maxdepth 1 -user root -exec ls -ld {} +
(その場合、ディレクトリの内容ではなくディレクトリ自体をリストするには、-d
フラグが必要です。)ls
答え2
以下のコマンドを使用してください
[username@localhost~]$ find / -user username -exec ls -l {} \; 2>/dev/null
システム全体でユーザー名が所有するすべてのファイルを検索します。特定のディレクトリから検索する場合は、場所を / に置き換えてください。
[username@localhost~]$ find /path/of/direcotry -user username -exec ls -l {} \; 2>/dev/null
注意:2>/dev/null はエラー出力を無効にします。
答え3
出力の形式を指定していないので、ls と grep を使用してこれを行うこともできます。
ls -lG | grep username
まず、-l パラメータを指定した ls を使用して、ユーザー名とグループ名を含むリストを取得します。
次に、-G パラメータを使用して結果からグループ名を削除します。
その後、それを grep にパイプして、目的のユーザー名を含むすべての結果を取得します。
編集: コメントで指摘されているように、これは安全ではないまたは完璧な解決策ですが、状況によっては、手っ取り早い方法になるかもしれません。対話型では許容できるかもしれませんが、スクリプトでは使用しないでください。
答え4
ではzsh
、グロブ修飾子u
:
u
idユーザーIDが所有するファイルidそれが数字であれば。そうでなければ、idユーザー名を指定します。'
u
' の後の文字は区切り文字として扱われ、その文字と次の一致する区切り文字の間の文字列がユーザー名として扱われます。開始区切り文字 '[
'、'{
'、および '<
' は、それぞれ終了区切り文字 ']
'、'}
'、および '>
' と一致します。その他の文字は、その文字自体と一致します。選択されるファイルは、このユーザーが所有するファイルです。たとえば、'u:foo:
' または 'u[foo]
' は、ユーザー ' ' が所有するファイルを選択しますfoo
。
例えばユーザーの場合ID
print -rl ./*(u1027)
またはユーザー名
print -rl ./*(u_yourusernamegoeshere_)
通常どおり、他の修飾子や修飾子などと組み合わせて、たとえば、隠しファイルかどうかに関係なく、ユーザーが所有しUID
1027
、そのユーザーによって並べ替えられた通常のファイルのみを一覧表示できますmtime
。
print -rl ./*(.Domu1027)