web-dev-qa-db-ja.com

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

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

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

24
Elham abbasi

GNUを手に入れましたか?

lsのGNUバージョンには_--group-directories-first_があります。また、cpには_-t_があります。

GNUなし?

Gnuのlsを持たないシステムでは、_-maxdepth n_/_-mindepth n_を使用したfindへの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"
_

気を付けて!

これらを一緒に使用することを計画している場合、つまり、findまたはlsからリストを収集し(おそらくxargsを使用して)、それをcp(またはcpラッパー)に渡す場合、何に 危険が潜んでいるかに注意する必要があります)ファイルのリストの解析 (基本的に、ファイル名には、スクリプトを混乱させる改行のような文字を含めることができます)。具体的には、findの_-exec_および_-print0_オプションとxargsの_-0_オプションを調べます。

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

代わりに rsync を使用することを検討してください。それはあなたの仕事を容易にするかもしれない多くの機能を持っています。

40
Shawn J. Goff

bashおよびzshで機能します

〜/ .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

enter image description here

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

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

非GNUのディレクトリを最初にリストするls

_ls -l | sort_

これは、シンボリックリンク、ソケット、パイプなどの他の奇妙なものもすべてリストします(もちろん、適切にグループ化されています)。それ以外の場合、フィルターはls -l | grep '^(-|d)' | sortになります

MacOSのような非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 } }'
}
1
clarkttfu

zshの補完リストの場合、list-dirs-firstスタイルをtrueに変更すると、最初にディレクトリが表示されます。あなたの~/.zshrc

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

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

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

0