web-dev-qa-db-ja.com

検索でディレクトリ名のリストを取得する

私はこれを行ってディレクトリ名のリストを取得できることを知っています:

find . -type d -maxdepth 1 

出力は次のようになります。

.
./foo
./bar

私は./なしのリストを好みます。生の名前だけを出力するように見つける方法はありますか?

リストをstatに送信してフォーマットしましたが、同じ結果が得られます。

find . -type d -maxdepth 1 -print0 | xargs -0 stat -f '%N'
40
joachim

GNU findを使用すると、-printfオプションを使用できます。

find . -maxdepth 1 -type d -printf '%f\n'

Pawełがコメントで述べたように、現在のディレクトリを一覧表示したくない場合は、-mindepth 1を追加します。例:

find . -mindepth 1 -maxdepth 1 -type d -printf '%f\n'
44
Thor

更新:

より短い代替案:

 find . -maxdepth 1 -type d | cut -c 3-

スラッシュなしで、1行に1つずつ名前を付けます。

18
Levon

GNU findを使用すると、-mindepthを使用して、findが現在のディレクトリと一致しないようにすることができます。

find . -type d -maxdepth 1 -mindepth 1

これを再帰的に行っていないので、bash globを使用できます。

echo */

末尾に/をグロブに追加すると、ディレクトリのみが一致します。

9
jordanm

私はむしろ使いたい:

 find ./ -type d -maxdepth 1 -exec basename {} \;
6
user1293137

これら2つの文字をsedで削除します。

find . -maxdepth 1 -type d | sed -e 's/^\.\///'
6
Birei

私は通常使用します:

find * -type d

しかし、それがあなたが望むことをする正しい方法であるかどうか私は知りません。

2
Francesco Turco

AIXでは、パラメーター 'maxdepth'は機能しません。

一般的にこれは私にとってはうまくいきます:

find ./ -type d | cut -d"/" -f2 | sort -u

0
user1656294

あなたが探しているものはbasenameと呼ばれ、UNIXのディレクトリ構造を無視します

下の例:

find /any/path/you/want -maxdepth 1 -type d -exec basename {} \;

コマンドを実行する前に、dirパスも含めて出力から除外し、cdを不要にします。


その他の補足情報:

代わりに-execを引数として渡して、代わりに|(pipe)の出力用の別のコマンドを検索します(2番目のコマンドが各出力行を通過するのを避けます。ただし、出力によっては、スクリプトのパフォーマンス)

注:findオプションは定位置ではないです(-maxdepthは、その前に指定されたテストと、その後に指定されたテストに影響します)。

0
gonzalesraul