LinuxベースLinuxベース:ファイル検索find
前に書く
linuxの日常管理ではfindの使用頻度が高く、熟練した把握は仕事の効率を高めるのに役立ちます.
findの文法は比較的簡単で、よく使われるパラメータはいくつかあります.例えば、
-name
、-type
、-ctime
などです.初心者は第2部の例を直接見て、パラメータの説明をさらに理解する必要がある場合はfindのヘルプドキュメントを参照することができます.find構文は次のとおりです.
find(オプション)(パラメータ)
よく使われる例
ファイル名で検索
現在のディレクトリとサブディレクトリの下にあるすべてのファイルをリストします.
find .
現在のディレクトリの下にある名前
11.png
のファイルを見つけます.find . -name "11.png"
現在のディレクトリの下にあるすべての
jpg
ファイルを見つけます.find . -name "*.jpg"
現在のディレクトリの下にある
jpg
ファイルとpng
ファイルを見つけます.find . -name "*.jpg" -o -name "*.png"
現在のディレクトリの下に
png
ではないファイルを見つけます.find . ! -name "*.png"
正規表現で検索
備考:正規表現は思ったより複雑で、いくつかのタイプをサポートしています.参照ここ
現在のディレクトリを検索すると、ファイル名はすべて数値の
png
ファイルです.find . -regex "\./*[0-9]+\.png"
パスに基づいて検索
現在のディレクトリの下にある
wysiwyg
を含むファイル/パスを見つけます.find . -path "*wysiwyg*"
ファイルの種類に応じて検索
-type
でファイルタイプのフィルタリングを行います.たとえば、現在のディレクトリの下にある
wysiwyg
を含むファイルを検索します.find . -type f -path "*wysiwyg*"
検索深度の制限
現在のディレクトリの下にあるすべての
png
を見つけます.サブディレクトリは含まれません.find . -maxdepth 1 -name "*.png"
これに対応して、
mindepth
オプションでもあります.find . -mindepth 2 -maxdepth 2 -name "*.png"
ファイルサイズによる
ファイルサイズは
-size
でフィルタされます.サポートされるファイルサイズユニットは次のとおりです.find . -type f -size +100M
アクセス/変更/変更時間に応じて
次の時間タイプをサポートします.
例えば、1日以内に修正されたファイルを探し出す
find . -type f -mtime -1
最近1週間以内にアクセスされたファイルを特定
find . -type f -atime -7
ログ・ディレクトリの1週間以上のログ・ファイルを
/tmp/old_logs
に移動します.find . -type f -mtime +7 -name "*.log" -exec mv {} /tmp/old_logs \;
注:{}は、-execオプションと組み合わせて使用してすべてのファイルに一致し、対応するファイル名に置き換えられます.
また、
\;
はコマンドが終了したことを示すために使用され、追加されていない場合は、次のようなヒントがあります.find: -exec: no terminating ";" or "+"
権限による
-perm
によって実現される.たとえば、現在のディレクトリの下にある権限が777
のファイルを見つけます.find . -type f -perm 777
現在のディレクトリの下にある権限が644ではないphpファイルを見つけます.
find . -type f -name "*.php" ! -perm 644
ファイル所有者別
ファイルの所有者が
root
のファイルを見つけます.find . -type f -user root
ファイルが存在するグループ
root
のファイルを見つけます.find . -type f -group root
ファイルが見つかったらコマンドを実行
-ok
、および-exec
によって実現される.違いは、-ok
コマンドを実行する前に二次確認が行われ、-exec
は行われません.実例を見てみましょう.現在のディレクトリの下にあるすべての
js
ファイルを削除します.-ok
の効果で下記の通り、削除前に二次確認があります➜ find find . -type f -name "*.js" -ok rm {} \;
"rm ./1.js"?
試しに
-exec
.直接削除しましたfind . -type f -name "*.js" -exec rm {} \;
空のファイルを見つける
例は以下の通り
touch {1..9}.txt
echo "hello" > 1.txt
find . -empty