Linux での find の一般的な使用例
· find path -option [ -print ] [ -exec -ok command ] {} ;
find コマンドのパラメータ;
pathname: find コマンドで検索されるディレクトリのパス。たとえば、現在のディレクトリを表すには . を使用し、システム ルート ディレクトリを表すには / を使用します。
-print: find コマンドは、一致するファイルを標準出力に出力します。
-exec: find コマンドは、一致するファイルに対してこのパラメーターで指定されたシェル コマンドを実行します。対応するコマンドは「command」{ } ; の形式になります。{ } と ; の間のスペースに注意してください。
-ok: -exec と同じ機能ですが、このパラメーターで指定されたシェル コマンドをより安全なモードで実行する点が異なります。各コマンドを実行する前に、ユーザーが実行するかどうかを決定するためのプロンプトが表示されます。
#-print 見つかったファイルを標準出力に出力します
#-exec コマンド {} ; -- 見つかったファイルに対してコマンド操作を実行します。{} と の間にはスペースがあります。 -exec、操作前にユーザーに確認してください
======================= == =============================
-name filename #filenameという名前のファイルを検索
-perm #実行権限で検索- user username # ファイル所有者で検索
-group groupname # グループで検索
-mtime -n +n # ファイル変更時刻でファイルを検索、-n は n 日以内、+n は n 日前を意味します
-atime -n +n
-nogroup #有効な所有者がいないファイルをチェックします。つまり、ファイルのグループが /etc/groups に存在しません
-nouser
-newer f1 !f2 ファイルを検索します。 -n は n 日以内を指します。 + n は n 日前を指します
-ctime -n +n # ファイルの作成時刻に基づいてファイルを検索します、-n は n 日以内を指します、+n は n 日前を指します 過去には、g-Nogramp のファイルには #有効なグループ、つまりファイルのファイルが
-NOUSER の/etc/グループに存在しない #有効な所有権のないファイルを検索するには、つまりファイルの所有者が/etc/passwd にありません。 Stock-Newer F1! F2 #F1 より古いファイルの変更時間を確認します
-TYP B/D/C/P/L/F #通常のファイルを確認します
-size n[c] #長さ n のファイルを確認しますブロック [または n バイト]
- Depth ただし、 f2 より古いファイル
-type b/d/c/p/l/f #ブロックデバイス、ディレクトリ、キャラクターデバイス、パイプ、シンボリックリンク、通常のファイルであるかどうかを確認します
- size n[c] #長さが n ブロック [または N バイト] であることを確認します。 file 节-DEPTH #サブディレクトリに入る前に、このカタログで見つかったファイルを検索します
Fastype #特定のタイプのファイル システムをチェックしますこれらのファイル システム タイプは通常、/etc/fstababaB にあります。 u-Mount を見つけます # ファイルをチェックするときは、ファイル システムのマウント ポイントを越えないでください
-Follow # シンボル リンク ファイルが見つかった場合は、ファイルをたどってください
-CPIO %; #ファイル システムのタイプのファイルを確認します。これらのファイル システム タイプは通常 /etc/fstab にあります
-mount cpio コマンドを使用してファイルをバックアップします。テープデバイス
- prune #ディレクトリを無視する
================================================ === ====
$find ~ -name "*.txt" -print #$HOME の .txt ファイルを確認して表示します
$find . -name "*.txt" -print
$find - name "[A-Z ]*" -print #大文字で始まるファイルをチェックする
$find /etc -name "host*" -print #ホストで始まるファイルをチェックする
$find . -name "[a-z][a-z][0] –9 ][0–9].txt" -print #2 つの小文字と 2 つの数字で始まる txt ファイルをチェックします
$find . -perm 755 -print
$find . -perm -007 -exec ls -l {} ; #すべてのユーザーが読み取り、書き込み、実行できるファイルを -perm 777
$find で確認します。 -type d -print
$find 。 . - サイズ +1000000c -print 10 ブロック ファイル (1 ブロック = 512 バイト)
$find etc home apps - Depth -print cpio -ivcdC65536 -o /dev/rmt0
$find /etc -name " passwd*" -exec grep "cnscn" {} ; #cnscn ユーザーが存在するか確認します
$find . -name "yao*" | xargs file
$find . -name " yao*" | xargs chmod o-w
============================ ============ =============
find -name april* 現在のディレクトリで april で始まるファイルを検索します
find -name april* fprint file 現在のディレクトリで april で始まるファイルを検索し、結果をファイルに出力します
find -name ap* -o -name May* ap で始まるファイルを検索します。
find /mnt -name tom.txt -ftype vfat /mnt でファイル システム タイプが vfat であるファイルを検索します。
find /mnt -name txt ! /mnt の下に tom.txt があり、ファイル システムのタイプが vfat ではありません
find /tmp -name wa* -type l wa で始まる名前のファイルを検索し、タイプが /tmp Files の下のシンボリック リンクです
find /home -mtime - 2 /home で過去 2 日間に変更されたファイルを確認する
find /home -atime -1 1 日以内にアクセスされたファイルを確認する
find /home -mmin +60 in/ 60 分前に変更されたファイルを確認するhome の下で
find /home -amin +30 30 分前にアクセスされたファイルを確認します
find /home -newer tmp.txt /home で更新時間が tmp.txt より新しいことを確認します ファイルまたはディレクトリ
find /home - anewer tmp.txt アクセス時間が tmp.txt より新しい /home 内のファイルまたはディレクトリをチェックします
find /home -used -2 で変更されたファイルまたはディレクトリをリストします 2 実行中にアクセスされたファイルまたはディレクトリ日
find /home -user cnscn /home ディレクトリ内のユーザー cnscn に属するファイルまたはディレクトリをリストします
find /home -uid +501 /home ディレクトリ内の 501 より大きいユーザー識別コードをリストします ファイルまたはディレクトリ
find / home -group cnscn /home 内のグループ cnscn を持つファイルまたはディレクトリをリストします
find /home -gid 501 /home 内のグループ ID 501 を持つファイルまたはディレクトリをリストします
find /home -nouser /home 内のグループ ID 501 を持たないファイルまたはディレクトリをリストしますローカル ユーザーに属します
find /home -nogroup ローカル グループに属さない /home 内のファイルまたはディレクトリを一覧表示します
find /home -name tmp.txt -max Depth 4 /home 内の tmp を一覧表示します 検索時の最大の深さは 3 です。レベル
find /home -name tmp.txt -min Depth 3 第 2 レベルからチェックを開始します
find /home -empty サイズ 0 のファイルまたは空のディレクトリを検索します
find /home -size +512k Check 512k を超えるファイルを検索します
find /home -size -512k 512k より小さいファイルを検索します
find /home -links +2 ハード リンク番号が 2 より大きいファイルまたはディレクトリを検索します
find /home -perm 0700 700 のアクセス許可を持つファイルまたはディレクトリを検索します
find /tmp -name tmp.txt -exec cat {} ;
find /tmp -name tmp.txt -ok rm {} ;
find / -amin -10 # システム内で過去 10 分間にアクセスされたファイルを検索します
find / -atime -2 # システム内で過去 48 時間にアクセスされたファイルを検索します
find / -empty # 空のファイルを検索しますシステムまたはフォルダー
find / -group cat # システム内で groupcat に属するファイルを検索
find / -mmin -5 # システム内で過去 5 分間に変更されたファイルを検索
find / -mtime -1 # 内のファイルを検索システム 過去 24 時間に変更されたファイル
find / -nouser #システム内で無効なユーザーに属するファイルを検索
find / -user fred #システム内でユーザー FRED に属するファイルを検索
現在のファイル内のすべての通常のファイルを確認しますディレクトリ
# find . -type f -exec ls -l {} ;
-rw-r–r– 1 root root 34928 2003-02-25 ./conf/httpd.conf
-rw-r–r– 1 root root 12959 2003-02-25 ./conf/magic
-RW-R – R — 1 root root 180 2003-02-25 ./conf.d/readme
現在のディレクトリおよび in-E 内のすべての通常のファイルx E C C オプションで ls -l コマンドを使用してリストします
================================== ====== ============
変更時刻が 5 日より古い /logs ディレクトリ内のファイルを見つけて削除します:
$ find logs -type f -mtime +5 -exec -ok rm {};
======================================== ======== =
その日に変更されたファイルをクエリ
[root@book class]# find ./ -mtime -1 -type f -exec ls -l {} ;
===== ========= ===================================
ファイルをクエリして尋ねます表示したい場合は
[root@book class] # find ./ -mtime -1 -type f -ok ls -l {} ;
< ls … ./classDB.inc.php > rw-r–r– 1 cnscn cnscn 13709 1 月 12 日 12:22 ./classDB.inc.php
[root@book class]# find ./ -mtime -1 -type f -ok ls -l {} ; ; ls … ./classDB.inc.php > n
[root@bookクラス]#
================= ============== ===========
クエリを実行し、処理のために awk に渡します
cnscn pts/0
=== ================================== ============
awk—grep —sed
[root@book クラス]# df -k | '{print $1}' | grep -v 'none' | /dev///g"
ファイルシステム
sda1
[root@bookクラス]# df -k | awk '{print $1}' | grep -v 'none'
ファイルシステム
/dev/sda2
/ dev/sda1
B) grep SYSCALL_VECTOR /tmp/*.h |cut -d':' -f1| uniq > ファイル名
C) find /tmp -name "*.h" -exec grep "SYSCALL_VECTOR" {} ; -print
2)find / -name filename -exec rm -rf {} ;
Find / -name filename -ok rm -rf {} ;
3) たとえば、次のようにします。ディスク上で 3M を超えるファイルを検索します:
find . -size +3000k -exec ls - ld {} ;
4) 見つかったものを別の場所にコピーします
find *.c -exec cp '{}' /tmp ' ;'
特殊なファイルがある場合は、cpio を使用するか、次の構文を使用できます:
find dir -name filename -print cpio -pdv newdir
6) 2004-11-30 16:36:37 に変更されたファイルを検索します
# A=`find ./ -name "*php"` ls -l –full-time $A 2>/dev/null | "2004-11-30 16:36:37"
Linux-all, Linux | No Comments »
find Example
April 18th, 2006
/usr/linux *.h ですべてを検索するには、これらのファイルで「SYSCALL_VECTOR」を検索し、最後に「SYSCALL_VECTOR」を含むすべてのファイル名を出力します。これを実現するにはいくつかの方法があります
find /usr/linux -name "*.h" -n50 grep SYSCALL_VECTOR
grep SYSCALL_VECTOR /usr/linux/*.h |cut -d':' -f1 | filename
find /usr/linux -name "*.h" -exec "SYSCALL_VECTOR" {} ; を使用しましたfind / -name filename | rm -rf を実行しましたが、失敗しました。なぜ失敗しましたか?
find . -name filename |rm -rf try {} で、見つかった結果を示します。
; は「憲法」に相当し、このように規定されているだけで、-exec の後にコマンドの終了を示す記号が必要です。答えは man find で見つかります。
find の結果を rm に認識させるには、次のようにします:
find / -name filename |
特定の文字列を含むファイルを検索します
たとえば、現在のディレクトリで「検索したい文字列...」という文字列を含むファイルを検索します。 :
$find . -type f -exec grep "検索したい文字列..." {} ; - print
ルートディレクトリから開始してtmpfileを確認し、見つかったらすぐに削除します
find / -name "tmpfile" -exec rm {};
find の Perm 問題
次のコマンドは何を意味しますか?キーは番号の前の - です。他の人はそれを知っています
私は知っています
find -name ".*" -perm 755
これは、許可ビットを持つ隠しファイルを見つけるために使用されます755 ファイル
そういえば、上記のコマンドで find の pathname パラメータを省略しましたが、find はデフォルトで現在の作業ディレクトリを検索しますか?
-exec の代わりに -ok を使用する場合でも、{} を追加する必要がありますか?
これはすでに明らかですが、-ok は -exec のプロンプト モードにすぎないため、操作を確認するための手順が 1 つ追加されるだけなので、まだ必要です。申し訳ありません
-007 は、すべてのユーザーを検索することを意味します。読み取り、書き込み、および実行が可能なファイルには注意してください~~~
説明してください。
find -name ".*" -perm -007 と find -name ".*" -perm 777 の間に違いはありますか?
-007 どうやって分かりましたか?
しかし、問題があります
現在のディレクトリをリストするために find . -perm -100 を使用していますが、これはなぜですか?
以下は、2002/10/01 06:15am にエクスプローラーによって公開された内容からの引用です:
-007 は、すべてのユーザーが読み取り、書き込み、実行できるファイルの検索を指します。注意してください~~~
以下は、2002/10/01 午前 10:16 に投稿された Xiaabaicai によるものです:
わかりました、笑
しかし、問題があります
現在のディレクトリを一覧表示するのに -perm -100 を使用しています。これはなぜでしょうか。
このメソッドはディレクトリを正確に検索できません。-100 は、少なくとも所有者が実行できる権限を持っていることを意味します。
UNIX システムでは、ディレクトリ ファイルに対する実行権限がある場合にのみディレクトリに入ることができるのは、このためです。
find . -perm -001 -print は通常、ディレクトリファイルを検索します
もちろん、この方法を使用してディレクトリを検索するつもりはありませんが、-100 の意味がわかりません
その後同様に、-010 は、そのアクセス許可が少なくとも所有者と同じグループによって実行可能であることを意味しますか?言い換えれば、010 と - ここでは実際には別のものであり、 - は少なくともという意味であり、010 は本当に許可ビットを表すために使用されるのでしょうか?
理解しました、ありがとうございます
見つかったものを別の場所にコピーしますか?
find *.c -exec cp '{}' /tmp ';'
find dir -name filename -print | cpio -pdv newdir
ディスク上の特定のサイズ範囲内のファイルを検索します
たとえば、ディスク上で 3M を超えるファイルを検索するには:
特定の日に変更されたファイルを見つけるためにfindを使用するにはどうすればよいですか?
次のコマンド行を使用して次のことを実行できます:
find コマンドを使用して、特定の期間のシェルを検索する方法。たとえば、11時から12時までです。ありがとうございます
次の内容でスクリプト judgetime を作成します:
ls -l $*|awk '{split($8,hour,":");if((hour[1]>23 ||hour[1] < 1 )&&hour[1]<24)print}'
検索したいディレクトリに移動して
find ./ -name "*" -exec judgetime {} ;
時間形式は 24 時間形式であることに注意してください。
ありがとうございます。分まで正確にしたい場合はどうすればよいですか
touch -t 04241112 starttemp #12 分まで正確にします
touch -t 04241220 endtemp #12:20 時点
find [dir] -newer starttemp -a -newer endtemp ! -exec ls -l {} ;
もう?
昨日の12時10分の文書はどうですか?
毎日実行する場合はその日の日付とタイムスタンプに置き換えれば十分ではないでしょうか?
彼が 11:00 から 12:00 までのものをすべて見つけたかどうかはわかりませんが、彼はそれを 1 回だけ実行したのでしょうか、それとも毎日実行しましたか?
今回の場合、物をどこに置いたか忘れてしまったのだと思いますが、夜遅くだったことだけは覚えています。
それは当然ですね!
さすが竹!
あなたは問題を解決する方法を知っているだけでなく、どのような状況でそのような問題が発生するかも知っています。私はあなたを尊敬します。
問題が再び発生します。このファイルを作成するとき。時刻であるはずの欄には、12:00 ではなく 2002 と書かれています。
12:00 が過ぎるまで待ちましょう!
指定した日付のファイルを削除します
find ./ -name file name-exec rm -f {} ;
例: 現在 30 日間使用されていないファイルを削除するには、次のコマンドを使用します:
find / - atime +30 -exec rm -f {} ;
私は SHELL の短いセクションを自分で書こうとしたり、ll、grep、rm コマンドも使用しましたが、満足のいくものではありませんでした。
フィルターされたファイル名のリストで FOR ステートメントを使用し、rm を実行します。この SHELL を拡張して、n 日前にファイルを削除するために毎日定期的に実行できるようにしたいと思います。どなたかヒントを教えてください。
別の質問があります。先ほど友人が言った「find / -atime +30 -exec rm -f {} ;
」という方法を何度か試しましたが、-atime n が正しくないようです。 n 日前にアクセスされたファイルを検索します。理解できないのは、ここでの時間基準点が何であり、n 日がどのように計算されるかです。
質問 2: 間違ったコマンド「ll |cut -f 1」を使用しましたか? ll にリストされているファイル名を削除したかっただけですが、ll を使用する必要がありました。 | 代わりに、cut -c 59- この方法で目的のファイル名を取得できますが、これはプールのアイデアです。私も awk を使用してみましたが、正しくないようです。誰かが私にいくつかのヒントをくれるかどうか見てみましょう。TKS はとてもたくさんです
質問 3. I ノードの日付形式を変更する方法。私の現在のシステムでは次のようになります:
- rw-r—– 1 msahz01 ユーザー 2253 2002 年 2 月 2 日 poheader.i
これを
-rw-rw-rw- 1 ハウス ユーザー 2193 2001 年 4 月 19 日 hkdisp.p
に置き換えたいと思います。これどうやってするの ?
awk は動作するはずです
ll | awk '{print $9}'
何日より古いファイルを削除します
find /yourpath -mtime +31 -exec rm {} ;
find /yourpath -mtime +366 -exec rm {} ;
find で、-ctime、-mtime、-atime の違いは何ですか?
-ctime と -mtime の関係は何ですか?
親ディレクトリの ctime が変更されると、その下のファイルの ctime も変更されますか?自動的に変更されますか?
-ctime、-mtime、および -atime に関する情報はどこにありますか?
新しく作成または変更されたファイルを見つけるために -mtime -1 を使用しました
しかし、1 日以内に mv されたファイルを見つけるにはどうすればよいですか? (時刻は元の時刻で、1 日より前です) ?
-newer オプションを使用します。
最初に次のように任意の時刻でファイルにタッチできます:
$ touch -t 08190800 test
$ ls -l test
-rw-r–r– 1 dba other 0 Aug 19 08:00 test
Then
$ find . -newer test -print
.
./.sh_history
$ ls -l .sh_history
-rw——- 1 dba other 154 Aug 20 17:39 .sh_history
タッチを使用して任意のタイム ファイルを書き込みます。成功するには、-newer,! -newer オプションを使用します。
1. ctime には、inode 情報が変更された時刻が含まれます。mtime は、ファイルの内容が作成または変更された時刻のみを指します。
2 いいえ、この情報はファイル システムのスーパー ブロックに保存される必要があります。
inode にはどのような情報が保存されますか?
-mtime が変更されると、-ctime は確実に変更されます。
Ifファイル名が変更されると、-ctime も変更されます。
i-node に何が保存されているかを誰が答えることができますか?
マスター、/usr/include/sys/inode.h にアクセスできません。
抜粋は次のとおりです。
ディレクトリにはディレクトリ エントリが含まれており、各エントリにはファイルまたはサブディレクトリ名とインデックス ノード参照番号 (i ノード番号) が含まれています。速度を向上させ、ディスク領域の使用率を向上させるために、ファイル内のデータは、ファイル レコードに関連付けられたすべての散在するデータ ブロックを見つけるために使用されるアドレスをコンピュータのメモリ内のさまざまな場所に格納します。変更とアクセスの時刻、アクセス モード、リンクの数、ファイルの所有者、ファイルの種類など、ファイルについての情報が表示されます。
しかし、-atime は変更されているのに、-ctime は変更されていないことがわかりました。なぜですか?
(最初に 1 つ ASCII ファイルの場合は、-atime -1 を使用します。使用可能な場合は、-ctime -1 を使用します。ただし、それは存在しません。)
inode 情報の変更と ctime の変更が矛盾しないでしょうか?
私はあなたが投稿した記事に同意しません。前述したように、sco unix では、atime、ctime、mtime は stat (stat_32) と呼ばれる構造になっています。 sco の inode の構造は次のとおりです:
{
struct inode *i_forw; /* inode hash chain */
struct inode *av_forw; ; /* フリーリスト チェーン */
struct inode *av_back; /* '' */
int *i_fsptr; /* fs に依存する "typeless" ポインタ */
ino32_t i_number; dev アドレス */
ushort i_ftype; /* ファイル タイプ = IFDIR、IFREG など */
short i_fstyp; /* ファイルのサイズ */
ushort i_uid; */
ushort i_gid; /* 所有者のグループ */
ushort i_flag;
ushort i_want; /* MP 競合を回避するための i_flag 拡張 */
ushort i_count; /* ディレクトリ エントリ * /
dev_t i_rdev; /* Raw デバイス番号 */
#define i_namtype i_rdev /* i_ftype==IFNAM サブタイプ */
dev_t i_dev; /* inode が存在するデバイス */
struct mount *i_mton;/* テーブルをマウントする*/
/* このディレクトリは * /
struct 領域 *i_rp; /* 共有領域 (存在する場合) への ptr */
struct stdata *i_sp; /* 関連するストリームへの ptr */
struct iisem *isem; /* XENIX セマフォへの ptr */
struct iisd *isd ; /* XENIX 共有データへの ptr */
} i_un;
#define i_mnton i_un.i_mton /* i_ftype==IFDIR IMOUNT */
#define i_rptr i_un.i_rp /* i_ftype==IFREG || i_ftype==IFBLK * /
#define i_sptr i_un.i_sp /* i_ftype==IFCHR || i_ftype==IFIFO */
#define i_sem i_un.isem /* i_ftype==IFNAM && i_namtype ==IFSEM */
#define i_sd i_un.isd / * i_ftype==IFNAM && i_namtype==IFSHD */
struct fstypsw *i_fstypp /* ファイルシステムスイッチ FSPTR への ptr */
long *i_filocks; to filock (構造体) リスト */
unsigned long i_mappages; /* 現在キャッシュされているページ数 */
short i_wcnt; /* オープン数または ITEXT; count */
struct lockb i_cilock; /* i_flag の変更を同期するためのタスク */
ushort i_rdlocks; /* 非排他的ロッカーの数 */
} inode_t;
したがって、ファイルにアクセスしても i ノード情報を変更することはできません。 mtime と ctime を比較する chown、chgrp、chmod コマンド
chown はファイルの所有者を変更しますが、mtime では見つけることができません
試してみてください。 Solaris でインタビューしました。 -ctime がわかりません。
ファイルを変更すると、-mtime が変更され、-ctime も変更されます。
ファイルにアクセスすると、-atime は変更されます。
chown、chgrp、chmod、mv は -ctime を変更しますが、atime と -mtime には影響しません。
touch は -mtime および -atime を変更できますが、touch -a が変更する場合はアクセス時間のみです。 - ctimeも変更されます
-ctimeを変更できるものは他にもたくさんあるようですが、わかりません
何か方法はありますか? -mtime、atime、ctime を表示するには?次のプログラムで st_mtime を st_ctime または st_atime と組み合わせれば、必要なものが得られます。
#include
int
main (int argc, char **argv)
{
struct stat buf;
char date[80];
char fname[80];
printf("mtime を確認するにはファイル名 (フルパス付き) を入力してください: ");
scanf("%s ",fname);
printf ("mtime (秒単位) ) of %s = %ldn", fname, buf.st_mtime);
strcpy(date, ctime((time_t *)&( buf.st_mtime)));
printf ("mtime (in date) of %s = % sn", fname, date);
}
ファイルのバックアップですが、何が問題なのでしょうか?
mtime ls -l ファイルの内容が最近変更された時刻
atime ls -lu ファイルが最近アクセスされた時刻
ctime ls -li ファイルの変更、属性所有者の変更、ノード、リンクの変更など、最近のファイル変更のステータス。前後の変更に限定されません
ls のヘルプを見ました。 ctime か atime で並べ替えているだけだと思っていたら、表示された時間はまだ mtime でした
よく比較してみると、ayhan さんの言っていることは正しかったです、ありがとう、ayhan さん。
ahyan さん、ヒントをありがとうございます! Solaris で次のことを試しました:
mtime は ls -l で表示されます
atime は ls -lu で表示されます (ls -li には inode 番号のみが含まれます)。
本からの抜粋は次のとおりです:
-c 並べ替え (-t) または印刷 (-l または -n) に i ノードの最終変更時刻 (ファイル
の作成、モードの変更など) を使用します。 .
-u 並べ替え (-t オプションを使用) または印刷 (
-l オプションを使用) に、最終変更ではなく最終アクセス時刻を使用します
。
-i ファイルごとに、最初の i ノード番号を出力します。
レポートのコラム