ディレクトリ内のすべてのファイルを一覧表示し、自分が所有しているファイルのみを表示するために使用できる、最も優れたシェルコマンド「ワンライナー」は何でしょうか。
短いワンライナーは次のようになります:
_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 {} +
_
(その場合、ls
への_-d
_フラグは、ディレクトリをそのコンテンツとしてではなく、それ自体としてリストするために必要です。)
以下のコマンドを使用
[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
NB:2>/dev/nullはエラー出力を無効にします。
for i in ./*; do [ -f "$i" ] && [ -O "$i" ] && echo "$i"; done
find . ! -name . -Prune -user "$(who -m)" -type f
所有している現在のディレクトリにあるプレーンファイルを一覧表示する方法は2つあります。
出力の形式を指定しなかったので、lsとgrepを使用してこれを行うこともできます。
ls -lG | grep username
最初にlsを-lパラメーターと共に使用して、ユーザー名とグループ名を含むリストを取得します。
次に、-Gパラメーターを使用して、結果からグループ名をプルーニングします。
その後、それをgrepにパイプして、すべての結果を目的のユーザー名で取得します。
[〜#〜] edit [〜#〜]:コメントで指摘されているように、これは安全ではないまたは防弾ソリューションです-ただし、状況によっては、早くて汚いものかもしれません。対話的には許容できるかもしれませんが、スクリプトでは使用しないでください。
zsh
では、 glob qualifier u
を使用してそれを行うことができます。
u
idユーザーIDidが所有するファイル(番号の場合)。それ以外の場合、idはユーザー名を指定します。'
u
'の後の文字は区切り文字として使用され、その文字列と次に一致する区切り文字がユーザー名として使用されます。開始セパレーター「[
」、「{
」、および「<
」は、それぞれ最終セパレーター「]
」、「}
」、および「>
」と一致します。他の文字はそれ自体と一致します。選択したファイルは、このユーザーが所有するファイルです。たとえば、「u:foo:
」または「u[foo]
」は、ユーザー「foo
」が所有するファイルを選択します。
そのため、たとえばユーザーID
print -rl ./*(u1027)
またはユーザー名付き
print -rl ./*(u_yourusernamegoeshere_)
いつものように、他の修飾子、修飾子などと組み合わせることができます。 UID
1027
を使用してユーザーが所有し、mtime
で並べ替えられた、非表示かどうかに関係なく、通常のファイルのみを一覧表示するには:
print -rl ./*(.Domu1027)