最初にディレクトリを表示してからファイルを表示するためにls
コマンドを使用したいと思います。私は試した:
ls -la | sort -k 1
しかし、私は間違った命令を受けました。
次のコマンドは、ディレクトリを最初にリストし、通常のファイルを2番目にリストし、リンクを3番目にリストします。
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"
また、キーストロークを節約するために、このコマンドに エイリアス を作成することは非常に意味があります。
編集:
ディレクトリを最初にして、次にディレクトリではないものがすべて必要な場合は、次のようにします。
ls -la | grep "^d" && ls -la | grep -v "^d"
私はとても愛* 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'
アルファベット順にしたい場合は、いくつかの選択肢があります。
あなたは単に試すことができます:
ls -al sort -k1 -r
あるいはこれと同じパーミッションを持つファイルのアルファベット順を守るために:
ls -al sort -k1,1 -k9,9 -r
あるいは、eleven81が言ったように(しかしこのバージョンはすべてをリストしている):
ls -la grep "^ d" && ls -la | grep "^ - " && ls -al | grep grep -v "^ [d | - ]"
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
しかし、私が正しく思い出した場合、隠しドットファイルはもともとディレクトリの前に現れました。
ディレクトリ一覧に表示したいことがいくつかありますが、これまでのところ、ここに挙げた答えはどれも以下の要件をすべて満たすものではありません。ディレクトリ一覧の私の要件:
./
と../
を除く)、ファイル、およびリンクの総数が含まれています。--group-directories-first
のような便利なオプションがGit Bash for Windowsで機能しないので、これは最もうまくするのが難しいです。たくさんハッキングした後、私はついに私が満足しているワンライナーを思いついた(非常に長い行ではあるが;-))。これを '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 -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
エイリアスを実際に見てみましょう。
前:
$ 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つのマイナーな欠点は、ファイル名を囲むカラーコントロール文字がソートをあまりにも信頼できなくするので、色付きのリストを作成できないことです。
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"}'
出力例:
$ 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 -laX
は、最初にディレクトリをアルファベット順に表示しますが、ファイルリストを壊します。
長いオプション:
ls
-l # List
--all
-X # Sort alphabetically by entry extension
これはこれを行うための関数です(bashまたはzsh)。そして、これが最善の方法であることを示唆しているのではありませんが、これは私が思いつき今使っているものです:
function lss { #先頭にディレクトリを付けてディレクトリ一覧を表示します。 command ls --color = always $ @ | egrep '^ d | total' コマンドls --color = always $ @ | egrep -v '^ d | total'; }
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
;
の代わりに&&
を使用します。そうしないと、ディレクトリを含まないディレクトリの内容を一覧表示できません(最初のlsコマンドはfalseと評価され、&&
と結合されているため、次のコマンドの実行は許可されません。;
別の方法 ...
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"
これはスクリプトソリューションです。名前だけを、iノードデータを、アルファベット順で、大文字と小文字を区別せずに列にフォーマットします。それは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のデフォルト動作を別名設定または変更しないでください。