回答:
次のコマンドは、最初にディレクトリ、2番目に通常のファイル、3番目にリンクを一覧表示します。
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"
また、キーストロークを保存するためにこのコマンドのエイリアスを作成することは非常に意味があります。
編集:
最初にディレクトリが必要で、次にディレクトリではないものすべてが必要な場合は、これを使用します。
ls -la | grep "^d" && ls -la | grep -v "^d"
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep -v -E "^d|^-|^total"
か?
alias la="ls -la | grep \"^d\" && ls -la | grep \"^-\" && ls -la | grep -E \"^d|^-\" -v | grep -v \"^total\""
ls -la|grep ^d;ls -la|grep -v ^d
(引用符が必要で、交換されていない&&
と;
)。別のオプションは、変数を導入してから評価することですa="ls -la|grep ^d";eval $a;eval $a -v
。より多くのオプションがls
/に指定されている場合、繰り返しを避けるのに役立ちますgrep
。そのls -la --group-directories-first
オプションもありますが、最短のimoはls -la|sort
* 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'
brew install bash
、これでうまくいくはずです!:)
ディレクトリのリストには特定の項目が表示されますが、ここまでの回答で以下の要件をすべて満たしているものはありません。ディレクトリリストの私の要件:
./
およびを除く../
)、ファイル、およびリンクの総数が含まれます--group-directories-first
Git Bash for Windowsで機能しないなどの便利なオプションがあるため、正しく取得するのが最も困難でした多くのことをハックした後、私はついに1行の(非常に長い行ですが;-)を思い付きました。これを「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
オプションは、「合計」行を取り除くことです。-F
ディレクトリの末尾のスラッシュを表示するために追加したいです(プレーンを実行すると、シンボリックリンクに「@」のマークが付けられますls -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シェル全体で一貫性があり、そしてそれはもはやに設定重いUTF-8文字のオーバーヘッドを持っていないので、(2)あなたは時々 、より高速なパフォーマンスを見ることができるようにロケールリセット扱う。
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
動作中の新しいエイリアスを見てみましょう!
前:
$ 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/
後:
$ 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)
1つの小さな欠点は、ファイル名を囲むカラー制御文字によりソートの信頼性が低下するため、色付きのリストを作成できないことです。
更新
上記のエイリアスは、ディープファイルシステムのルートディレクトリから実行した場合、非常に遅いため、この単純な、しかしはるかに高性能なコマンドに更新しました。
ls -AFoqv --color --group-directories-first | tail -n +2 && find -maxdepth 1 -type f -printf '%s\n' | awk '{total+=$1} END {print total" bytes"}'
サンプル出力:
$ 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
。新しいエイリアスは以前のエイリアスほど多くの情報を表示しませんが、パフォーマンスの向上は価値があります。特典として、色も取得できます!
アルファベット順を維持するかどうかに応じて、いくつかの選択肢があります。
あなたは単に試すことができます:
ls -al | ソート-k1 -r
または、これと同じ許可を持つファイルのアルファベット順を維持するには:
ls -al | sort -k1,1 -k9,9 -r
または、eleven81が言ったように(しかし、このバージョンはすべてをリストしています):
ls -la | grep "^ d" && ls -la | grep "^-" && ls -al | grep -v "^ [d |-]"
ls- al|sort -k1 -r
仕事以来。欠けていたのは-r
フラグだけです。
./
あり../
、その順序で最初の2行ではありません。それ以外は、より効率的なソリューションであることに同意します。
delerious010の答えは、私はあなたが古いスタイルの順序付けたい場合ことを追加します。
LANG=C ls -la --group-directories-first
(またはLC_ALL、LANGUAGE、またはLC_COLLATEを「C」に設定して使用します)。
これにより、次のような結果が得られます。
.
..
DIR
Dir
dir
.hidden
123
UC_FILE
Uc_file
lc_file
ただし、正しく思い出せば、隠しドットファイルはもともとディレクトリの前に表示されていました。
これを行う関数(bashまたはzsh)は次のとおりです。そして、...これが最良の方法であることを示唆していませんが、私が思いついて今使用しているものです。
関数lss { #上部にディレクトリを含むディレクトリ一覧を表示します。 コマンドls --color = always $ @ | egrep '^ d | total' コマンドls --color = always $ @ | egrep -v '^ d | total'; }
ls -l
ようなファイルタイプでフィルタリングするには、長いリスト形式()を使用する必要があります。また、このコマンドはスペース(bash)で中断します。あなたはそうのように引用する必要があります:"$@"
あなたは、このアプローチを使用する場合は、あなたがそうのような何かができる:function lss {local temp="$(command ls -l --color=always "$@")"; egrep --color=never '^d|total' <<<"$temp"; egrep --color=never -v '^d|total' <<<"$temp"}
別の方法 ...
find . -d 1 -type d | ls -la | sort -r
または
ls -la | sort -r
または
d=`find . -type d -d 1`;f=`find . -type f -d 1`; echo -e -DIRS- "\n$d\n" -FILES- "\n$f"
alias ls='ls -lhF --color'
list_sorted() {
ls $* | grep "^d";
ls $* | grep "^-";
ls $* | grep -v -E "^d|^-|^total"
}
alias ll=list_sorted
ここで回答とコメントで提供されるソリューションの組み合わせを使用します。
ls
まず、次のデフォルトの動作を上書きしますls
。
-l
:常にリストを1次元の垂直リストとして表示します-h
:人間が読める形式でファイルサイズを表示します(例:4096ではなく4.0K)-F
:ディレクトリの末尾にスラッシュのようなインジケータを表示しますalias ls='ls -lhF --color'
ll
次に、ソートロジックを含む関数を作成します。それぞれls
に対して、最初に渡された引数を渡します。これにより、リストしたいディレクトリとは異なる作業ディレクトリのエイリアスを使用できます(例:)ls -a ~
。
また、への各呼び出しls
はgrep
コマンドにパイプされます。ここで、ソートが行われます。ls -l | grep "^d"
たとえば、ディレクトリのみをリストします。ディレクトリを最初にリストする必要がある場合、これも関数の最初に来る必要があります。次はファイルです。
最後に、ディレクトリでもファイルでもないものすべてを表示します(ディレクトリの内容の合計サイズを示す行も表示します)。これは、directoy、通常のファイルエントリ、および合計エントリをgrepし、-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
。
alias ll=list_sorted
;
代わりに&&
、コマンドの区切り文字として使用します。それ以外の場合は、1ディレクトリを含まないディレクトリの内容を一覧表示することができません(最初のlsコマンドは、それが結合していますので、このように、次のコマンドの実行を許可しない、falseと評価&&
。;
それを回避することができます。)これはスクリプトソリューションです。名前のみをリストし、inodeデータはなし、アルファベット順、大文字と小文字を区別せず、列にフォーマットします。ただし、lsのデフォルト出力のような列メジャーではなく行メジャーです。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[@]}"
また、もう1つ、追加の書式設定があります。
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を呼び出すため、lsのデフォルトの動作をエイリアスしたり変更したりしないでください。
-
はd
使用する前に来るためですsort