最初にディレクトリでファイルとディレクトリをリストする方法


22

2つの質問があります。最初に、どのコマンドがファイルとディレクトリをリストしますが、ディレクトリを最初にリストしますか?

2番目の質問:ファイルのリストを1つのディレクトリにコピーしたいのですが、ターゲットディレクトリをコマンドの最初のファイル名にします。


5
ls持っている--group-directories-firstスイッチを。
-jasonwryan

1
-tこれは、おそらくGNUのみのオプションcpであり、明示的なターゲットディレクトリを使用するため、コマンドラインの先頭を含むどこにでも移動できます。
jw013

回答:


36

GNUを手に入れましたか?

のgnuバージョンはlshas --group-directories-firstです。そしてcp持ってい-tます。

GNUはありませんか?

gnuを持たないシステムでは、適切なオプションを使用lsfind-maxdepth n/ -mindepth nを2回連続して呼び出すのが最善の策-type tです。

find . -maxdepth 1 -mindepth 1 -type d
find . -maxdepth 1 -mindepth 1 \! -type d

ファイルをコピーするには、最初にターゲットを使用してshift、最初の引数を保存してからを使用し、引数を最後に追加するスクリプトを作成する必要があります。

#!/bin/sh
target="$1"
shift
cp -r -- "$@" "$target"

気を付けて!

あなたはこれらを一緒に使用して計画していた場合- 、からリストを収集しているfindls(おそらく使用してxargs)とに渡すcp(またはcpラッパー)、あなたは何を知っておく必要があり危険はファイルのリストを解析するにある(基本的には、ファイル名ができますスクリプトを台無しにする可能性のある改行のような文字が含まれています)。具体的に、一見findさん-exec-print0オプションとxargs-0オプション。

ディレクトリツリーを効率的にコピーするための代替ツール。

rsync代わりに使用することを検討してください。仕事を楽にする多くの機能を備えています。


これは素晴らしい。より一般的には、GNUバージョンを持っているかどうかを知る方法はありますか?(オプションを試す以外--group-directories-first)。
アメリオバスケスレイナ

3
実行ls --versionして、あなたが持っているものを見つけることができます。
ショーンJ.ゴフ

6

GNU以外のディレクトリの最初のリストls

ls -l | sort

これには、シンボリックリンク、ソケット、パイプなどの他の奇妙なものもすべてリストされます(もちろん、適切にグループ化されます)が、問題ではないものを考えると非常にまれです。そうでなければ、フィルターはls -l | grep '^(-|d)' | sort


1
賢く、受け入れられた回答よりも短い+1。本当にそうであることを除いsort -r
PythonNut 14年

1
ls -l | Macではソートは機能しませんでした。最初にディレクトリをグループ化しますが、それらをソートせず、その後に続くファイル名もソートしませんでした。
レイ

また注意: `| sort`は色がテキストになったため削除します。
JayRizzo

4

以下のために働くのbashzshの

〜/ .bashrcまたは〜/ .zshrcにエイリアスを追加するだけです

# Colorize the ls output ##
alias ls='LC_COLLATE=C ls -h --group-directories-first --color=auto'

また、ZSHを使用している場合は、「k」ユーティリティを使用できます

k -h --group-directories-first

ここに画像の説明を入力してください

以下を〜/ .zshrcに入れて、抗原とともにインストールするだけです

antigen bundle reduxionist/k --branch=add-sort-options

1
エイリアスを提供する良い答え。
рüффп

0

以下のためにzsh、完了リストの、あなたが設定することができますlist-dirs-firstにスタイルをtrue最初に表示されるディレクトリの。あなたの~/.zshrc

zstyle ':completion:*' list-dirs-first true

(ここでそれをサポートするすべての補完ウィジェットとすべてのコマンドに適用されます。必要に応じて制限できます。zstyle詳細についてはドキュメントを参照してください)

まだ実行していない場合はcompinstall、同様に実行して、色付きの補完リスト、説明など、その他のすべてのグッズを取得してください。


0

GNU以外の場合、awkは他のすべてのフィールドをフィルタリングできます。

ls -l | sort -r | awk 'NF==9 { if ($1~/^d/) { print $9 "/" } else { print $9 } }'
  • NF == 9:の出力にls -lは9つのフィールドが含まれている必要があります
  • 行が「d」で始まる場合、追加の「/」を出力します
  • それ以外の場合は、ファイル名のみ

出力は次のようになりますls -1が、ディレクトリが最初に置かれます。

node_modules/
src/
e2e/
angular.json
tslint.json
package.json
README.md

ls manページの「The Long Format」によると、他のファイルタイプが関係する場合、出力順序は次のようになります。

   s     Socket link.
   p     FIFO.
   l     Symbolic link.
   d     Directory.
   c     Character special file.
   b     Block special file.
   -     Regular file.

便利なbash関数(.bash_profileまたは.bashrcに入れてください):

function l1() {
  ls -l $* | sort -r | awk 'NF==9 { if ($1~/^d/) { print $9 "/" } else { print $9 } }'
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.