ls
コマンドを使って、最初にディレクトリを表示して、次にファイルを表示するようにしたいと思います。試してみました
ls -la | sort -k 1
でも、順番を間違えてしまった
99 atricapilla 2010-02-16
次のコマンドを実行すると、最初にディレクトリ、2番目に通常のファイル、3番目にリンクが一覧表示されます
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"
また、キーストロークを保存するために、このコマンド用にaliasを作成するのは非常に理にかなっています
Edit:
ディレクトリを先に、そしてディレクトリ以外のものを後にしたい場合は、これを使用します
ls -la | grep "^d" && ls -la | grep -v "^d"
31 eleven81 2010-02-16
私は*nixが大好きで、これらの返信の中には創意工夫を凝らしたものもあります
私のはGNU Linuxではそれほど派手ではありません
alias ls='ls --color -h --group-directories-first'
linux CLI アプリの方が快適なので、OSX の coreutils も更新する傾向があります
brew install coreutils
alias ls='/usr/local/bin/gls --color -h --group-directories-first'
223 jonathanserafini 2010-02-16
mac ユーザーの場合、coreutils をインストールすることができます
この式は、GNUコアユーティリティの実装を提供し、macOSでも提供されているコマンドは、”g “という接頭辞を付けてインストールされています
brew install coreutils
gls --color -h --group-directories-first
別名でさらに生活をシンプルにすることができます
alias ls='gls --color -h --group-directories-first'
19 Vadym Tyemirov 2014-06-13
アルファベット順にするかどうかによって、いくつかの選択肢があります
あなたは単に試してみることができます
ls -al | sort -k1 -r
またはこれを使用して、同じパーミッションを持つファイルのアルファベット順を保持します
ls -al | sort -k1,1 -k9,9 -r
または、eleven81が言ったように(しかし、このバージョンではすべてをリストアップしています)
ls -la | grep “^d” & ls -la | grep “^-” & ls -al | grep -v “^[d|-]”
6 Studer 2010-02-16
私はディレクトリのリストで見たいと思う特定のものがあり、今のところ、ここでの答えのどれも以下のすべての要件を満たしていません。ディレクトリのリストのための私の要件
- ディレクトリやファイルはアルファベット順に並んでいます
- ディレクトリが最初に表示されます
- シンボリックリンク(シンボリックリンク)はファイルのようにソートされます
- ソートは大文字と小文字を区別しません
- 並べ替えでは、ファイル名の先頭にあるすべての非アルファ文字を無視します
- リストには、ディレクトリ(
./
と../
を除く)、ファイル、リンクの合計数が含まれています - リストには、ディレクトリとファイルの合計サイズ(ディスク使用量)が含まれています
- リストは Linux と Windows (Git Bash シェル) で同じように見えるようにしなければなりません — これが一番難しかったのは、
--group-directories-first
のような便利なオプションが Windows の Git Bash では動作しないからです
いろいろと調べてみた結果、ようやく納得のいく一文を思いついた(非常に長い行ではあるが ;-)。これを「dir」という名前のエイリアスに割り当てました
ls -dlF --color * .* | head -n2 && ls -AlF | LC_ALL=C grep "^d" |
LC_ALL=C sort -k 9df && ls -AlF | LC_ALL=C grep "^[l-]" |
LC_ALL=C sort -k 9df && echo -e `find -maxdepth 1 -type d ! -name . |
wc -l` Dir\(s\) `du -hs | cut -f 1`\\t\\t`find -maxdepth 1 -type f |
wc -l` File\(s\) `find -maxdepth 1 -type f -print0 | du -ch --files0-from=- |
tail -n 1 | cut -f 1`\\t\\t`find -maxdepth 1 -type l | wc -l` Link\(s\)
管理を容易にするために、ディレクトリリストの各セグメントを自分の好みに合わせて出力するための別々のコマンドを考え出し、&&
演算子を使ってそれらを一緒に組み立てました
ls -dlF --color * .* | head -n2
—./
と../
を抽出する。これらはすでに正しい順序になっているので、sort
には渡したくありませんし、ソートすると../
が最初にリストアップされることになります。-d
オプションは “total” 行を削除するためのものです。私は-F
を追加してディレクトリの末尾のスラッシュを表示するのが好きです (これは、シンボリックリンクにも “@” をマークします)ls -AlF | LC_ALL=C grep "^d" | LC_ALL=C sort -k 9df
— ディレクトリを抽出し、ファイル名 (9列目) でソートし、非アルファ/スペース文字 (d
オプション) と大文字小文字 (f
オプション) の両方を無視する。ls -A
オプションは、前のステップですでに抽出した./
と../
をリストから除外します。私はすべてのgrep
およびsort
コマンドの前にLC_ALL=C
ロケールリセットを付ける傾向があります。これは、(1) 出力が Unix シェル間で一貫していること、(2) 重い UTF-8 文字セットを扱うためのオーバーヘッドがなくなるため、パフォーマンスが向上することがあるからですls -AlF | LC_ALL=C grep "^[l-]" | LC_ALL=C sort -k 9df
— 上記の手順に似ていますが、今回はファイルとシンボリックリンクをソートしていますfind -maxdepth 1 -type d ! -name . | wc -l
—./
と../
を除いたディレクトリの数を取得しますfind -maxdepth 1 -type f | wc -l
— ファイル数を取得しますfind -maxdepth 1 -type l | wc -l
— シンボリックリンクの数を取得しますdu -hs | cut -f 1
— すべてのサブディレクトリの合計サイズを人間が読める形式で抽出しますfind -maxdepth 1 -type f -print0 | du -ch --files0-from=- | tail -n 1 | cut -f 1
— 全ファイルの合計サイズを人間が読める形式で抽出します
新しい dir
のエイリアスの動作を見てみましょう!
BEFORE:
$ ls -alF
total 22
drwxr-xr-x 13 Tom Administ 4096 Oct 25 02:38 ./
drwxr-xr-x 3 Tom Administ 0 Dec 24 2014 ../
drwxr-xr-x 15 Tom Administ 4096 Sep 17 01:23 .VirtualBox/
-rw-r--r-- 1 Tom Administ 615 Oct 25 02:38 .aliases
-rw-r--r-- 1 Tom Administ 12742 Oct 24 11:47 .bash_history
-rw-r--r-- 1 Tom Administ 3234 Oct 24 15:06 .bash_profile
drwxr-xr-x 1 Tom Administ 0 Jan 24 2015 .gem/
-rw-r--r-- 1 Tom Administ 586 Oct 24 03:53 .gitconfig
drwxr-xr-x 1 Tom Administ 4096 Dec 28 2014 .ssh/
drwxr-xr-x 4 Tom Administ 0 Jan 24 2015 .travis/
-rw-r--r-- 1 Tom Administ 6645 Oct 25 02:38 _viminfo
-rw-r--r-- 1 Tom Administ 4907 Oct 24 15:16 profile
drwxr-xr-x 1 Tom Administ 0 Oct 24 22:20 tmp/
AFTER:
$ dir
drwxr-xr-x 13 Tom Administ 4096 Oct 25 02:38 ./
drwxr-xr-x 3 Tom Administ 0 Dec 24 2014 ../
drwxr-xr-x 1 Tom Administ 0 Jan 24 2015 .gem/
drwxr-xr-x 1 Tom Administ 4096 Dec 28 2014 .ssh/
drwxr-xr-x 1 Tom Administ 0 Oct 24 22:20 tmp/
drwxr-xr-x 4 Tom Administ 0 Jan 24 2015 .travis/
drwxr-xr-x 15 Tom Administ 4096 Sep 17 01:23 .VirtualBox/
-rw-r--r-- 1 Tom Administ 615 Oct 25 02:38 .aliases
-rw-r--r-- 1 Tom Administ 12742 Oct 24 11:47 .bash_history
-rw-r--r-- 1 Tom Administ 3234 Oct 24 15:06 .bash_profile
-rw-r--r-- 1 Tom Administ 586 Oct 24 03:53 .gitconfig
-rw-r--r-- 1 Tom Administ 4907 Oct 24 15:16 profile
-rw-r--r-- 1 Tom Administ 6645 Oct 25 02:38 _viminfo
5 Dir(s) 2.8M 6 File(s) 31K 0 Link(s)
マイナーな欠点としては、ファイル名の周囲の色制御文字がソートを信頼性の低いものにしてしまうので、色付きのリストを持つことができないということがあります
UPDATE
上のエイリアスは、ディープファイルシステムのルートディレクトリから実行すると痛いほど遅かったので、このシンプルだがよりパフォーマンスの高いコマンドに更新しました
ls -AFoqv --color --group-directories-first | tail -n +2 && find -maxdepth 1 -type f -printf '%s\n' | awk '{total+=$1} END {print total" bytes"}'
Sample output:
$ dir
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .aws/
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .gem/
drwxr-xr-x 1 Tom 0 Mar 29 19:32 .ssh/
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .zbstudio/
drwxr-xr-x 1 Tom 0 Jun 16 2016 temp/
drwxr-xr-x 1 Tom 0 Jul 13 2016 vimfiles/
-rw-r--r-- 2 Tom 365 Mar 30 10:37 .aliases
-rw-r--r-- 1 Tom 16028 Mar 30 12:12 .bash_history
-rw-r--r-- 2 Tom 2807 Mar 30 12:12 .bash_profile
-rw-r--r-- 2 Tom 2177 Mar 29 23:24 .functions
-rw-r--r-- 1 Tom 1091 Mar 30 10:34 .gitconfig
-rw-r--r-- 1 Tom 8907 Mar 29 14:45 _viminfo
-rw-r--r-- 1 Tom 2444 Jul 13 2016 _vimrc
33819 bytes
新しいバージョンの Git Bash for Windows は --group-directories-first
をサポートしているので、もはや sort
に頼る必要はありません。新しいエイリアスは以前のエイリアスほど多くの情報を表示しませんが、パフォーマンスの向上はそれに見合うだけの価値があります。特典として、あなたはまた色を得ます!
6 thdoan 2015-10-24
delerious010さんの回答に、旧態依然とした注文を希望するならば、それを付け加えておきます
LANG=C ls -la --group-directories-first
(または “C “に設定されたLC_ALLまたはLANGUAGEまたはLC_COLLATEを使用する)
これで似たようなものが出てきます
.
..
DIR
Dir
dir
.hidden
123
UC_FILE
Uc_file
lc_file
しかし、私の記憶が正しければ、隠しドットファイルは元々ディレクトリの前に現れていました
5 Paused until further notice. 2010-02-16
これを行うための関数があります(bashやzsh)。そして…これが最良の方法だとは言いませんが、私が思いついたもので、今使っているものです
function lss { # Shows directory listing with directories at the top. command ls --color=always $@ | egrep '^d|total' command ls --color=always $@ | egrep -v '^d|total'; }
2 SuperMagic 2010-02-16
ls -laX
はディレクトリをアルファベット順に最初に表示しますが、ファイルリストをねじ込んでしまいます
Long options:
ls
-l # List
--all
-X # Sort alphabetically by entry extension
2 Bobby 2010-02-16
別の方法
find . -d 1 -type d | ls -la | sort -r
OR
ls -la | sort -r
OR
d=`find . -type d -d 1`;f=`find . -type f -d 1`; echo -e -DIRS- "\n$d\n" -FILES- "\n$f"
1 Eddie B 2012-06-08
TL;DR
alias ls='ls -lhF --color'
list_sorted() {
ls $* | grep "^d";
ls $* | grep "^-";
ls $* | grep -v -E "^d|^-|^total"
}
alias ll=list_sorted
Explanation
私はここの回答やコメントにある解答を組み合わせて使っています
Default ls
まず、ls
のデフォルトの動作を上書きします
-l
:リストを常に一次元の縦長リストとして表示します-h
:ファイルサイズを人間が読みやすい形で表示する(例:4096ではなく4.0K)-F
:ディレクトリの末尾のスラッシュのようなインジケータを表示する
alias ls='ls -lhF --color'
Extended ll
次に、ソートロジックを含む関数を書きます。それぞれの ls
に対して、元々渡されていた引数を渡します。これにより、リストアップしたいディレクトリ(ls -a ~
など)とは異なる作業ディレクトリからのエイリアスを使用することができます
また、ls
の各呼び出しはgrep
コマンドにパイプされています。ここでソートが行われます。例えば、ls -l | grep "^d"
はディレクトリのみをリストアップします。ディレクトリを最初にリストアップしたい場合は、関数内でも最初にリストアップする必要があります。次にファイルです
最後に、ディレクトリでもファイルでもないもの(ディレクトリの内容の合計サイズを示す行でもないもの)を全て表示します。これは、directoy、通常のファイルエントリ、合計エントリをグレップし、-v
引数を使って結果を反転させることで行われます
list_sorted() {
# List directories
ls $* | grep "^d";
# List regular files
ls $* | grep "^-";
# List everything else (e.g. symbolic links)
ls $* | grep -v -E "^d|^-|^total"
}
最後に、関数を新しいコマンドにエイリアスします。特に、あるシナリオで関数が壊れてしまった場合に備えて、ls
を上書きしないようにしたい。そこで、ls
を使えるようにしたいのです。あるいは、エイリアスされていない ls
コマンドを \ls
を呼び出すことで、常に ls
コマンドを呼び出すことができます
alias ll=list_sorted
Notes
- 私はコマンドの区切り文字として
&&
の代わりに;
を使用しています。そうしないと、ディレクトリを含まないディレクトリの内容をリストアップすることができません (最初の ls コマンドは false と評価され、&&
と結合されているため、次のコマンドの実行を許可しません。;
はこれを回避しています)
1 kleinfreund 2017-06-22
これはスクリプトによる解決策です。名前だけをリストアップし、inode データを含まず、アルファベット順で、大文字小文字を区別せず、列にフォーマットします。ls のデフォルト出力のようにメジャー列ではなくメジャー行になっていますが。gt;26文字のファイル名がある場合、列は少し乱雑になります
rm -f /tmp/lsout
ls -1p | grep / | sort -f >> /tmp/lsout
ls -1p | grep -v / | sort -f >> /tmp/lsout
IFS=$'\n' read -d '' -r -a lines < /tmp/lsout
printf "%-24s %-24s %-24s\n" "${lines[@]}"
そしてもう一つは、いくつかの余分なフォーマットを追加したものです
rm -f /tmp/lsout
echo " ---- Directories ---- " >> /tmp/lsout
ls -1p | grep / | sort -f >> /tmp/lsout
IFS=$'\n' read -d '' -r -a lines < /tmp/lsout
printf "%-24s %-24s %-24s\n" "${lines[@]}"
rm -f /tmp/lsout
echo " ------- Files ------- " >> /tmp/lsout
ls -1p | grep -v / | sort -f >> /tmp/lsout
IFS=$'\n' read -d '' -r -a lines < /tmp/lsout
printf "%-24s %-24s %-24s\n" "${lines[@]}"
最後の方の出力は、色を差し引いて以下のようになります
---- Directories ---- archive/ bookmarks/
Desktop/ Documents/ Downloads/
fff/ health/ Library/
Movies/ Music/ Pictures/
Public/ rrf/ scifi/
testdir/ testdir2/
------- Files ------- @todo comedy
delme lll maxims
schedule vtokens style
このスクリプトは ls を呼び出すので、エイリアスを付けたり、デフォルトの動作を変更したりしないことを覚えておいてください
0 Igorio 2014-07-29
各パートを別々に解いて、最後に結合します。各サブコマンドを解くことは、プロセスの各部分を理解するのに役立ち、より良い開発者になるので、この答えを選択することを考慮してください
アルファベット順に並べたディレクトリの一覧です
ls -lp | grep "/"
隠しフォルダをアルファベット順に並べたディレクトリのリスト
ls -lap | grep "/"
アルファベット順に並べたファイルの一覧です
ls -lp | grep -v "/"
隠しフォルダをアルファベット順に並べたファイルのリスト
ls -lap | grep -v "/"
最初にディレクトリのリストを表示し、次にアルファベット順に並べたファイルを表示します
ls -lp | grep "/" && ls -lap | grep -v "/"
最初のディレクトリのリストは、非表示を示すアルファベット順にソートされたファイル
ls -lap | grep "/" && ls -lap | grep -v "/"
そしてもちろん、あなたが望むならば、後でこれを行うためのエイリアスを作成することができます
alias foldersThenFiles='ls -lap | grep "/" && ls -lap | grep -v "/"'
0 jasonleonhard 2020-02-19