Bashコマンドを使用してディレクトリ内のフォルダだけを一覧表示する方法はありますか? (ls
コマンドはすべてのファイルとフォルダーをリストします)
あなたが使用することができます:
ls -d -- */
すべてのディレクトリは/
で終わるので、これは現在のパスのディレクトリだけをリストします。 - dオプションを指定すると、ディレクトリ名のみが印刷され、その内容は印刷されません。
Stephen Martinの返事は警告を出し、現在のフォルダもリストしたので、私は提案する
find . -mindepth 1 -maxdepth 1 -type d
(これはLinux上にあります。POSIXのmanページでfindの-maxdepthと-mindepthが見つかりませんでした)
find . -maxdepth 1 -type d
フォルダだけを一覧表示します。そしてTeddyが指摘したように、サブディレクトリに再登録するのを止めるには-maxdepthが必要です。
Danielの答えは正しいです。 これは便利な追加機能です。
隠しフォルダが表示されないようにするには(.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
printf "%s\n" */
は$ PWD内のすべてのディレクトリを一覧表示します。
echo */
も機能しますが、長い1行では、名前にスペースが含まれているとさらに難しくなります。
また使用することができます:
du
または
git ls-tree -d -r --name-only @
グロブパターンの選択に関して、ここで私を混乱させるものを強調するために。あなたがこれを持っていると言う:
$ 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/