私はこれを行ってディレクトリ名のリストを取得できることを知っています:
find . -type d -maxdepth 1
出力は次のようになります。
.
./foo
./bar
私は./
なしのリストを好みます。生の名前だけを出力するように見つける方法はありますか?
リストをstatに送信してフォーマットしましたが、同じ結果が得られます。
find . -type d -maxdepth 1 -print0 | xargs -0 stat -f '%N'
GNU find
を使用すると、-printf
オプションを使用できます。
find . -maxdepth 1 -type d -printf '%f\n'
Pawełがコメントで述べたように、現在のディレクトリを一覧表示したくない場合は、-mindepth 1
を追加します。例:
find . -mindepth 1 -maxdepth 1 -type d -printf '%f\n'
更新:
より短い代替案:
find . -maxdepth 1 -type d | cut -c 3-
スラッシュなしで、1行に1つずつ名前を付けます。
GNU findを使用すると、-mindepthを使用して、findが現在のディレクトリと一致しないようにすることができます。
find . -type d -maxdepth 1 -mindepth 1
これを再帰的に行っていないので、bash globを使用できます。
echo */
末尾に/をグロブに追加すると、ディレクトリのみが一致します。
私はむしろ使いたい:
find ./ -type d -maxdepth 1 -exec basename {} \;
これら2つの文字をsed
で削除します。
find . -maxdepth 1 -type d | sed -e 's/^\.\///'
私は通常使用します:
find * -type d
しかし、それがあなたが望むことをする正しい方法であるかどうか私は知りません。
AIXでは、パラメーター 'maxdepth'は機能しません。
一般的にこれは私にとってはうまくいきます:
find ./ -type d | cut -d"/" -f2 | sort -u
あなたが探しているものはbasename
と呼ばれ、UNIXのディレクトリ構造を無視します
下の例:
find /any/path/you/want -maxdepth 1 -type d -exec basename {} \;
コマンドを実行する前に、dirパスも含めて出力から除外し、cd
を不要にします。
その他の補足情報:
代わりに-exec
を引数として渡して、代わりに|
(pipe)の出力用の別のコマンドを検索します(2番目のコマンドが各出力行を通過するのを避けます。ただし、出力によっては、スクリプトのパフォーマンス)
注:find
オプションは定位置ではないです(-maxdepthは、その前に指定されたテストと、その後に指定されたテストに影響します)。