FreeBSDの `ls -R`コマンドからディレクトリを除外する


0

FreeBSD 9.2のディレクトリにすべてのファイルを一覧表示したいのですが、特定のディレクトリを含めたくありません。の両方-I--ignoreパラメータをチェックしましたがlsIスーパーユーザーモードのみを無視し、--ignoreサポートされていません。

誰かがls別のコマンド(などgrep)を使用してそれを使用する方法を知っていますか?

回答:


0

たとえば、特定のディレクトリ内のファイルを除くすべてのファイルを一覧表示するnotHere場合は、findコマンドを使用して次のようにすることができます

find . -path ./notHere -prune -o -type f -print

説明:

  • .:開始するディレクトリfind内を
  • -path ./notHere:パスに一致するルールを開始します ./notHere
  • -prunefind現在の一致でディレクトリに降りることを防ぎます
  • -o:を追加しorて、最初のルールが一致しなかった場合の処理​​を指定します
  • -type f:たとえば、ディレクトリではなくファイルのみに一致します(ディレクトリエントリも表示する場合はこれを削除します)
  • -print:多くの場合、それはデフォルトのアクションであるため必要ありませんが、一部のバージョンではfind、結果を出力する必要があることを明示的に伝えたい場合があります。

ls -llファイル名のリストだけでなく、他の出力(具体的には)が必要であることに言及しています。 find多くの場合、これを支援する組み込み機能がありますが、の特定のオプションはありませんls-print上記のフラグをに置き換えて、-lsそのlsオプションセットが十分に近いかどうかを確認できます。

find . -path ./notHere -prune -o -type f -ls

または、それでも十分でない場合は、次のfindように出力を個別に処理する代わりに、必要なコマンドを実行できます。

find . -path ./notHere -prune -o -type f -exec ls -ll {} +

ファイル情報が必要だとは言わなかったので、答えは答えです!ただし、サイズや日付などの各ファイルの情報を取得するにはどうすればよいですか?(次のような出力が必要ls -llです。検索結果をを含むシェルスクリプトにフィードできることは知っていますが、while非常に遅いと思います
。-ネイマン

多くのバージョンfindでもが持っている-ls、あなたの代わりに使用できることを-print。Freebsdのmanページには-lsls -dgilsどちらがあなたにとって十分近いかもしれないような出力を与えると書かれています。そうしないと、置き換えることができます-print-exec ls -ll {} +して、手動ですべての出力を処理しようとするよりも高速であるべきであるwhileループ
エリックRenoufを

それはまさに私が欲しいものです。ただし、まだ+1できません;)
ネイマン

1

このスクリプトを使用して、名前が「_」で始まるすべてのフォルダーを除外します。スペースのあるフォルダではおそらく動作しませんが、修正することはできます。

#!/bin/sh

A=`ls /j/ | xargs | sed 's/_[a-z0-9]*//g' | awk '{$1=$1;print}'`
W=`echo $A | wc -w | tr -d '[[:space:]]'`
echo $W

一般的に興味深いのはこれです:

ls some_folder | xargs | sed 's/_[a-z0-9]*//g'

正規表現に_[a-z0-9]*は、除外する名前と一致するパターンが含まれています。

これは、-aオプション(名前のみ)なしでフォルダーを一覧表示する場合です。使用したい場合-a、最も簡単な方法は次のとおりです。

ls -la | grep -v skip_folder

どこskip_folderが除外する名前です。フォルダーにスペースが含まれている場合は、引用符を使用します。例:

ls -la | grep -v "skip folder"

ls -la | grep -v "skip folder"ディレクトリ名のみを省略し、その内容は残ります。ls -ll | pcregrep --color -v -M "directoryAddress(\n|.)*nextDirectoryFullAddress"リスト全体を省略するを使用しました。ただし、ディレクトリ構造が変更される可能性があり(つまり、別のリストがそれらの間に追加される可能性がある)、一部のデータが失われるため、これは良い答えとは見なしません。
ネイマン

あなたの質問は少しわかりにくいですが、ディレクトリを再帰的に一覧表示しますか?1つを除くすべてのディレクトリのすべてのファイルを一覧表示するfind場合は、パスに基づいて特定の名前をgrepで出力できるため、最適です。たとえば、次のとおりですfind . | grep -v .ssh/id_rsa
Greg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.