回答:
次を使用できます。
ls -d -- */
すべてのディレクトリはで終わるため/
、現在のパスにあるディレクトリのみがリストされます。-dディレクトリ名のみが印刷されているオプション保証しません、その内容。
ls -d -- */
とはls -d */
?
--
は、ファイルの名前が-l
lsの場合に長いリスト形式のオプションとして解釈されないように、オプションの終わりを示すために通常使用されます。
スティーブン・マーティンの応答は警告を発し、現在のフォルダーもリストしましたので、お勧めします
find . -mindepth 1 -maxdepth 1 -type d
(これはLinux上にあり、POSIXのmanページでfindの-maxdepthと-mindepthを見つけることができませんでした)
ls -d -- */
オプションが好きfind
です。これは時々役に立つかもしれませんが、時にはトラブルを引き起こすこともあります。このコメントが他の人の役に立つことを願っています。+1
ダニエルの答えは正しいです。ただし、いくつかの便利な追加機能があります。
隠しフォルダー(など.git
)をリストしないようにするには、これを試してください:
find . -mindepth 1 -maxdepth 1 -type d \( ! -iname ".*" \)
また、一部の環境で出力の先頭にある恐ろしいドットスラッシュを置き換えるにはfind
、これを使用します。
find . -mindepth 1 -maxdepth 1 -type d \( ! -iname ".*" \) | sed 's|^\./||g'
あなたはlsの出力を「想定されていない」解析する、またはそう言われています。背後にある理由は、出力は人間が読めるように意図されており、思い出すと、解析が不必要に複雑になる可能性があるためです。
lsやfindが必要ない場合は、 "[-d]"で "*"をフィルタリングしてみてください。
私はそれをやった、何らかの理由でlsとfindが機能していなかった(スペースとブラケットのあるファイル名、または私が見落としていた他の何か)、その後、私は
for f in * ; do [ -d "$f" ] && echo $f is indeed a folder ; done
globパターンの選択に関して、ここで私を混乱させたものを強調するために。あなたはこれを持っていると言います:
$ cd /tmp
$ mkdir testglob
$ for ix in {00,01,02,03} ; do mkdir testglob/mydir_${ix} ; done
$ for ix in {00,01,02,03} ; do touch testglob/myfile_${ix} ; done
$ for ix in {00,01,02,03} ; do touch testglob/mydir_${ix}.txt ; done
$ for ix in {00,01,02,03} ; do mkdir testglob/otherdir_${ix} ; done
$ tree testglob/
testglob/
├── mydir_00
├── mydir_00.txt
├── mydir_01
├── mydir_01.txt
├── mydir_02
├── mydir_02.txt
├── mydir_03
├── mydir_03.txt
├── myfile_00
├── myfile_01
├── myfile_02
├── myfile_03
├── otherdir_00
├── otherdir_01
├── otherdir_02
└── otherdir_03
8 directories, 8 files
したがって、ここではmydir*
ディレクトリのみを選択するとします。終了スラッシュを省略すると、ls -d
ファイルもリストされることに注意してください。
$ ls -d testglob/mydir* # also `ls -d -- testglob/mydir*`
testglob/mydir_00 testglob/mydir_01 testglob/mydir_02 testglob/mydir_03
testglob/mydir_00.txt testglob/mydir_01.txt testglob/mydir_02.txt testglob/mydir_03.txt
...ただし、終了スラッシュを使用すると、ディレクトリのみがリストされます。
$ ls -d testglob/mydir*/ # also `ls -d -- testglob/mydir*/`
testglob/mydir_00/ testglob/mydir_01/ testglob/mydir_02/ testglob/mydir_03/
printf "%s\n" */
$ PWD内のすべてのディレクトリをリストします。
echo */
も機能しますが、長い1行では、名前にスペースが含まれる場合はより困難になります。
以下も使用できます。
du
または:
git ls-tree -d -r --name-only @