findコマンドで特定のパスを除外する
1. 概要
Linuxユーザーとして、私たちはファイルシステムでさまざまな操作を頻繁に実行します。 たとえば、一般的な操作の1つはファイルの検索です。 システムに多数のファイルがある場合、この単純なタスクには時間がかかります。 ただし、検索パスから特定のディレクトリを除外することで、効率を上げることができます。
このチュートリアルでは、findコマンドを使用してこれを実現するさまざまな方法について説明します。
2. -pruneオプションの使用
例として使用するファイルとディレクトリのセットを作成しましょう。
$ mkdir mp3 jpeg txt
$ touch mp3/1.mp3 mp3/2.mp3 mp3/3.mp3
$ touch jpeg/1.jpeg jpeg/2.jpeg jpeg/3.jpeg
$ touch txt/1.txt txt/2.txt txt/3.txt
作成したディレクトリツリーを見てみましょう。
$ tree
.
├── jpeg
│ ├── 1.jpeg
│ ├── 2.jpeg
│ └── 3.jpeg
├── mp3
│ ├── 1.mp3
│ ├── 2.mp3
│ └── 3.mp3
└── txt
├── 1.txt
├── 2.txt
└── 3.txt
findコマンドの-pruneオプションを使用して、特定のパスを除外できます。
$ find . -path ./jpeg -prune -o -print
.
./txt
./txt/3.txt
./txt/2.txt
./txt/1.txt
./mp3
./mp3/1.mp3
./mp3/2.mp3
./mp3/3.mp3
上記の例では、 find コマンドは、jpegを除くすべてのディレクトリで検索を実行します。
-o演算子を使用して、複数のパスを除外することもできます。
$ find . \( -path ./jpeg -prune -o -path ./mp3 -prune \) -o -print
.
./txt
./txt/3.txt
./txt/2.txt
./txt/1.txt
上記の例では、 -o operator を使用して、jpegおよびmp3ディレクトリを除外しています。
3. -not演算子の使用
find コマンドは、-not演算子も提供します。 これを使用して、検索パスからディレクトリを除外できます。
$ find . -type f -not -path '*/mp3/*'
./jpeg/3.jpeg
./jpeg/2.jpeg
./jpeg/1.jpeg
./txt/3.txt
./txt/2.txt
./txt/1.txt
上記の例では、 -not 演算子を使用して、検索パスからmp3ディレクトリを除外しています。
4. !演算子を使用する
ディレクトリを除外するもう1つの方法は、
$ find . -type f ! -path '*/txt/*'
./jpeg/3.jpeg
./jpeg/2.jpeg
./jpeg/1.jpeg
./mp3/1.mp3
./mp3/2.mp3
./mp3/3.mp3
上記の例では、
5. 結論
このチュートリアルでは、findコマンドの検索パスからディレクトリを除外するための3つの実用的な例について説明しました。 Linuxシステムで作業している間、これらのコマンドを日常生活で使用できます。