lsの特定のファイルを除外する


61

lsを実行し、特定のファイルを出力から除外したいと思います。

次のコマンドを実行すると、すべてのファイルが1行で取得されます。

$ ls -1
file1
file2
file3
temp

私はそれが示すようにこのコマンドを実行したいと思います

$ ls -1 <insert magic here> temp
file1
file2
file3

回答:


82
ls -I <filename>

-I =ファイル名を無視します。つまり、指定したファイルをリストしません。

複数のファイルを無視するには、各ファイル名の前に-Iを追加します。

ls -I file1 -I file2

名前の拡張子でファイルを無視するには、たとえば次のようにします。

ls -I "*.jpg" -I "*.svg"

4
長い形式のオプションを使用する場合--ignore、グロブパターンに拡張することができます。たとえば、ls --ignore="file?"またはls --ignore="file*"
steeldriver 14

3
あなたは、パターンを引用して、同様の短い形式でglobパターンを使用することができます
verboze

18

-Iを1回使用すると機能しますが、2回使用すると機能しません。例: ls -I *.csv動作します。

しかし、 ls -I *.csv -I *.txt機能せず、代わりにtxtファイルを返します。

--ignoreは私のためにトリックをしました。これは私が必要とし、働いたものです。

ls -lhrt --ignore="*.gz" --ignore="*.1"

古いバックアップログを除外するログフォルダーからファイルが一覧表示されます。


3
最初の形式で* .csvを引用することは機能しls -I '*.txt'ます。引用符なしで動作しない理由は、シェル拡張のためです。つまり、すべてのcsvファイルを除外するのではなくリストするようにシェルに指示しているためです。実際に起こっているのは、展開後の最初の.csvファイルと.1ファイルを無視するが、残りをリストすることです
15

二重引用符も私のために働いた。ありがとう@verboze
user38537

これは簡単です。ありがとう。
フィリップデルテイユ

6

ls --ignore={"*.jpg","*.png","*.svg"}


4
これは、bashのブレース展開を使用して3つの--ignoreオプションを取得するだけです。また、使用している可能性が--ignore="*."{jpg,png,svg}
muru

1

これはあなたが探している出力を生成すると思います:

ls -1 !(temp)

どうやら、あなたshopt -s extglobはそれが機能する必要があります
(私はそれを有効にしていますので、遠い過去のある時期に私はそれを便利で有効にしたと思います)。

grepを使用して出力をフィルタリングすることもできます。

ls -1 | grep -v '^temp$'

パイプとフィルターを使用すると、柔軟性が大幅に向上し、他のコマンドや状況に移行できるスキルが得られますが、この特定のケースでは興味がないかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.