回答:
*/
は、現在のディレクトリ内のすべてのサブディレクトリに一致するパターンです(*
すべてのファイルとサブディレクトリに一致します。これはディレクトリに/
制限されます)。同様に、/ home / alice / Documentsの下のすべてのサブディレクトリを一覧表示するには、次を使用します。ls -d /home/alice/Documents/*/
ls
存在しないものに使用すると、いつでもそのエラーが発生します。
ls */
がないls
場合は、現在のディレクトリ内のすべてのファイルをリストするだけに展開されます。それはあなたがその場合あなたが望むものではないことはかなり確信しています。
echo
例:echo */
、echo */*/
ここに私が得たものがあります:
cs/ draft/ files/ hacks/ masters/ static/
cs/code/ files/images/ static/images/ static/stylesheets/
ls
のみを使用する例:ls -d */
これが私が得たものです:
cs/ files/ masters/
draft/ hacks/ static/
またはリストとして(詳細情報付き): ls -dl */
ls
およびの使用grep
例:ls -l | grep "^d"
ここに私が得たものがあります:
drwxr-xr-x 24 h staff 816 Jun 8 10:55 cs
drwxr-xr-x 6 h staff 204 Jun 8 10:55 draft
drwxr-xr-x 9 h staff 306 Jun 8 10:55 files
drwxr-xr-x 2 h staff 68 Jun 9 13:19 hacks
drwxr-xr-x 6 h staff 204 Jun 8 10:55 masters
drwxr-xr-x 4 h staff 136 Jun 8 10:55 static
例:for i in $(ls -d */); do echo ${i%%/}; done
ここに私が得たものがあります:
cs
draft
files
hacks
masters
static
終了文字として「/」を使用する場合、コマンドは次のようになります。 for i in $(ls -d */); do echo ${i}; done
cs/
draft/
files/
hacks/
masters/
static/
3
私にとって他のものよりも著しく遅い。テストしたディレクトリ:1
.012s、2
.016s、3
.055s、4
.021s。
1
好きです。
time
はUnix関数を使用しました。私は同意する///、echo */
より賢いですls -d */
。
1.
オプションは、スペースが含まれるフォルダ名を処理するときに大きな問題を引き起こします。
私が使う:
ls -d */ | cut -f1 -d'/'
これにより、末尾にスラッシュがない単一の列が作成されます-スクリプトで役立ちます。
私の2セント。
-1
オプションはls
、同様に単一列形式で出力しますls -1 -d */
。
-1
、すべてのエントリに対して引き続きスラッシュを出力することに注意してください。
.bashrc
エイリアスとして追加する場合、どのように追加し'/'
ますか?
'\/'
| sed -e 's-/$--'
サブフォルダーのないすべてのフォルダー:
find /home/alice/Documents -maxdepth 1 -type d
すべてのフォルダの場合とサブフォルダ:
find /home/alice/Documents -type d
find /home/alice/Documents -maxdepth 1 -mindepth 1 -type d
それ以外の場合は、/home/alice/Documents
自分自身を含めます。ディレクトリへのシンボリックリンクを含めるには、プレフィックスを-L
引用符で囲まれていないアスタリスクは、*
シェルによってパターン(グロブ)として解釈されるであろう。
シェルはパス名の展開でそれを使用します。
次に、パターンに一致するファイル名のリストを生成します。
単純なアスタリスクは、PWD(現在の作業ディレクトリ)内のすべてのファイル名に一致します。で終わるすべてのファイル名に一致
するような、より複雑なパターン。したがって、すべてのディレクトリ。そのため、コマンドは次のとおりです。*/
/
echo */
echo ./*/ ### avoid misinterpreting filenames like "-e dir"
echo
PWD内のすべてのディレクトリに(シェルによって)展開されます。
これをテストするには:mkdir
test-dirのような名前のディレクトリ()を作成し、cd
そこに入れます。
mkdir test-dir; cd test-dir
いくつかのディレクトリを作成します。
mkdir {cs,files,masters,draft,static} # safe directories.
mkdir {*,-,--,-v\ var,-h,-n,dir\ with\ spaces} # some a bit less secure.
touch -- 'file with spaces' '-a' '-l' 'filename' # and some files:
echo ./*/
奇妙な名前のファイルがあっても、コマンドは信頼できるままです。
./--/ ./-/ ./*/ ./cs/ ./dir with spaces/ ./draft/ ./files/ ./-h/
./masters/ ./-n/ ./static/ ./-v var/
ただし、ファイル名にスペースが含まれていると、読みにくくなります。
の代わりにecho
を使用した場合ls
でも、シェルはファイル名のリストを拡張するものです。シェルがPWDのディレクトリのリストを取得する理由です。-d
オプションls
になり、それは(デフォルトで提示される)の代わりに、各ディレクトリの内容の現在のディレクトリエントリをリストします。
ls -d */
ただし、このコマンドは(ある程度)信頼性が低くなります。上記の奇妙な名前のファイルで失敗します。それはいくつかの名前で窒息します。問題のあるものを見つけるまで、1つずつ消去する必要があります。
GNU ls
は「オプションの終わり」(--
)キーを受け入れます。
ls -d ./*/ ### more reliable BSD ls
ls -d -- */ ### more reliable GNU ls
各ディレクトリを(ls -1のように1列で)1行にリストするには、次のコマンドを使用します。
$ printf "%s\n" */ ### Correct even with "-", spaces or newlines.
そして、さらに良いことに、末尾を削除でき/
ます:
$ set -- */; printf "%s\n" "${@%/}" ### Correct with spaces and newlines.
このような試み:
$ for i in $(ls -d */); do echo ${i%%/}; done
失敗します:
ls -d */
すでに上に示したいくつかの名前()。IFS
。IFS
)。最後に、関数内で引数リストを使用しても、現在実行中のシェルの引数リストには影響しません。単に:
$ listdirs(){ set -- */; printf "%s\n" "${@%/}"; }
$ listdirs
このリストを提示します:
--
-
*
cs
dir with spaces
draft
files
-h
masters
-n
static
-v var
このオプションは、いくつかのタイプの奇妙なファイル名で安全です。
このtree
コマンドはここでもかなり便利です。デフォルトでは、すべてのファイルとディレクトリが完全な深さまで表示され、いくつかのASCII文字がディレクトリツリーを示します。
$ tree
.
├── config.dat
├── data
│ ├── data1.bin
│ ├── data2.inf
│ └── sql
| │ └── data3.sql
├── images
│ ├── background.jpg
│ ├── icon.gif
│ └── logo.jpg
├── program.exe
└── readme.txt
しかし、ASCIIツリーなしで、現在のディレクトリからの完全パスを使用して、ディレクトリのみを取得したい場合は、次のようにできます。
$ tree -dfi
.
./data
./data/sql
./images
引数は次のとおりです。
-d List directories only.
-f Prints the full path prefix for each file.
-i Makes tree not print the indentation lines, useful when used in conjunction with the -f option.
そして、絶対パスが必要な場合は、現在のディレクトリへのフルパスを指定することから始めます。
$ tree -dfi "$(pwd)"
/home/alice/Documents
/home/alice/Documents/data
/home/alice/Documents/data/sql
/home/alice/Documents/images
また、サブディレクトリの数を制限するには、サブディレクトリの最大レベルをで設定できます-L level
。例:
$ tree -dfi -L 1 "$(pwd)"
/home/alice/Documents
/home/alice/Documents/data
/home/alice/Documents/images
なぜ 'ls -d * /'からの出力が次のような2つの末尾スラッシュを与えるのか疑問に思っている場合は、
[prompt]$ ls -d */
app// cgi-bin// lib// pub//
これはおそらく、シェルまたはセッション構成ファイルのどこかに、-Fフラグを含むバージョンのlsにlsコマンドのエイリアスを設定しているためです。このフラグは、各出力名(プレーンファイルではない)に文字を追加して、その種類を示します。したがって、1つのスラッシュはパターン「* /」に一致するfromであり、もう1つのスラッシュは追加された型インジケーターです。
この問題を取り除くために、もちろん、lsに別のエイリアスを定義することができます。ただし、一時的にエイリアスを呼び出さないようにするには、コマンドの前にバックスラッシュを付けます。
\ ls -d * /
これを自分の.bashrc
ファイルに追加するだけです(1つのセッションで必要な場合のみ、コマンドラインで入力することもできます)。
alias lsd='ls -ld */'
次に、lsdは目的の結果を生成します。
ls
ディレクトリへのシンボリックリンクを含む実際の解決策ここでの多くの回答は実際には使用しませんls
(またはの簡単な意味でのみ使用しますls -d
が、実際のサブディレクトリのマッチングにはワイルドカードをls
使用しls
ます。並べ替え順序などのオプションを使用できるため、真の解決策は役立ちます。
を使用した1つのソリューションls
が提供されていますが、ディレクトリへのシンボリックリンクを除外するという点で他のソリューションとは異なります。
ls -l | grep '^d'
(ファイル名を介して、sed
またはawk
ファイル名を分離するために)
(おそらくより一般的な)ディレクトリへのシンボリックリンクを含める必要がある-p
場合はls
、のオプションを使用して、ディレクトリ名(シンボリックリンクを含む)にスラッシュ文字を追加できます。
ls -1p | grep '/$'
または、末尾のスラッシュを取り除く:
ls -1p | grep '/$' | sed 's/\/$//'
ls
必要に応じてオプションを追加できます(長いリストが使用されている場合、これ-1
は不要です)。
注:私たちがあればしたい最後のスラッシュを、それらがによって強調されたくないgrep
、我々はhackishlyラインの実際のマッチした部分が空にすることによって、強調表示を削除することができます。
ls -1p | grep -P '(?=/$)'
隠しディレクトリをリストする必要がない場合は、以下を提供します。
ls -l | grep "^d" | awk -F" " '{print $9}'
また、隠しディレクトリをリストする必要がある場合は、次を使用します。
ls -Al | grep "^d" | awk -F" " '{print $9}'
または
find -maxdepth 1 -type d | awk -F"./" '{print $2}'
awk
について詳しく知りたい場合は、この回答
なしでフォルダリストを表示するには /
ls -d */|sed 's|[/]||g'
ls -d1 */ | tr -d "/"
これが私が使っているものです
ls -d1 /Directory/Path/*;
ls -d1 /Directory/Path/*/
*/
現在のディレクトリ内のディレクトリに一致するファイル名一致パターンです。
ディレクトリのみを一覧表示するには、次の関数が好きです。
# long list only directories
llod () {
ls -l --color=always "$@" | grep --color=never '^d'
}
.bashrcに入れてください。
使用例:
llod # long listing of all directories in current directory
llod -tr # same but in chronological order oldest first
llod -d a* # limit to directories beginning with letter 'a'
llod -d .* # limit to hidden directories
注:この-i
オプションを使用すると、破損します。これを修正します:
# long list only directories
llod () {
ls -l --color=always "$@" | egrep --color=never '^d|^[[:digit:]]+ d'
}
参考までに、すべてのファイルを複数行でls -1
印刷する場合は、各ファイルを別々の行に印刷するa を実行できます。file1 file2 file3
これを試してみてください。すべてのLinuxディストリビューションで動作します。
ls -ltr | grep drw
ls -l | grep '^d' | awk '{print $9}'
私は部分的に解決しました:
cd "/path/to/pricipal/folder"
for i in $(ls -d .*/); do sudo ln -s "$PWD"/${i%%/} /home/inukaze/${i%%/}; done
ln: «/home/inukaze/./.»: can't overwrite a directory
ln: «/home/inukaze/../..»: can't overwrite a directory
ln: accesing to «/home/inukaze/.config»: too much symbolics links levels
ln: accesing to «/home/inukaze/.disruptive»: too much symbolics links levels
ln: accesing to «/home/inukaze/innovations»: too much symbolics links levels
ln: accesing to «/home/inukaze/sarl»: too much symbolics links levels
ln: accesing to «/home/inukaze/.e_old»: too much symbolics links levels
ln: accesing to «/home/inukaze/.gnome2_private»: too much symbolics links levels
ln: accesing to «/home/inukaze/.gvfs»: too much symbolics links levels
ln: accesing to «/home/inukaze/.kde»: too much symbolics links levels
ln: accesing to «/home/inukaze/.local»: too much symbolics links levels
ln: accesing to «/home/inukaze/.xVideoServiceThief»: too much symbolics links levels
まあ、これは私に、市長の部分を減らす:)
完全な円にするために追加し、すべてのフォルダのパスを取得するには、アルバートの回答と非常に役立つはずのGordanの組み合わせを使用します。
for i in $(ls -d /pathto/parent/folder/*/); do echo ${i%%/}; done
出力:
/pathto/parent/folder/childfolder1/
/pathto/parent/folder/childfolder2/
/pathto/parent/folder/childfolder3/
/pathto/parent/folder/childfolder4/
/pathto/parent/folder/childfolder5/
/pathto/parent/folder/childfolder6/
/pathto/parent/folder/childfolder7/
/pathto/parent/folder/childfolder8/
Perlの使用:
ls | perl -nle 'print if -d;'
これは、ツリーを使用して、別の行にのみディレクトリ名を出力するバリエーションです。そうです。
tree -d | grep -E '^[├|└]' | cut -d ' ' -f2
またはawkで
tree -d | grep -E '^[├|└]' | awk '{print $2}'
これはおそらくより良い方法であり、/
後のディレクトリ名を保持します。
ls -l | grep "^d" | awk '{print $9}'
file *|grep directory
O / P(私のマシン上)-
[root@rhel6 ~]# file *|grep directory
mongo-example-master: directory
nostarch: directory
scriptzz: directory
splunk: directory
testdir: directory
上記の出力は、cutを使用することでさらに洗練させることができます。
file *|grep directory|cut -d':' -f1
mongo-example-master
nostarch
scriptzz
splunk
testdir
* could be replaced with any path that's permitted
file - determine file type
grep - searches for string named directory
-d - to specify a field delimiter
-f1 - denotes field 1
ディレクトリのみを一覧表示するための、これまでで最も短いコマンド(実際にはハック)。目的のディレクトリの絶対パスまたは相対パスを入力し、Enterキーを押して目的のディレクトリに入ります。次に、タイプcd
してTabキーを押します。現在、ディレクトリのみが表示されています。
user@ubuntu:~/Desktop$cd <tab key>
上記のコマンドでは、デスクトップのフォルダーのみが表示されます。確かに最短。
-d
実際の意味を説明します。