
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
-ls
ls
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"