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

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

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

ls別のコマンド ( などgrep)を使用してそれを使用する方法やそれを実行する方法をご存知の方はいらっしゃいますか?

答え1

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

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

説明:

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

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

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

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

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

答え2

このスクリプトを使用して、名前が '_' で始まるすべてのフォルダーをフィルターします。スペースを含むフォルダーでは機能しない可能性がありますが、修正することはできます。

#!/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"

関連情報