世界を探る
6142 ワード
find
Unix/Linuxコマンドラインツールボックスの最高のコマンドの1つです.動作方法:ファイル階層に沿って下に遍歴し、条件に合致するファイルに一致し、対応する操作を実行します.テストしたディレクトリ構造をプレビューします
➜ findtest tree
.
|____1.txt
|____one
| |____one_1.txt
| |____two
| | |____two_2.txt
|____three
| |____three_1.txt
|____two
| |____two_1.txt
-name
-name
ファイル名に一致する文字列を指定し、ワイルドカードを使用できる*
ある特徴のファイルに一致する'*'shellでは任意の文字で、他の正規言語の'.'と同じです.
.txt
➜ findtest find . -name "*.txt"
./1.txt
./one/one_1.txt
./one/two/two_2.txt
./three/three_1.txt
./two/two_1.txt
two
関連書類➜ findtest find . -name 'two*'
./one/two
./one/two/two_2.txt
./two
./two/two_1.txt
ここにはファイルとディレクトリがリストされていますが、ファイルやディレクトリを表示するだけではどうすればいいですか?
-type
-type
検索するファイルの種類を指定できる➜ findtest find . -name 'two*' -type d
./one/two
./two
➜ findtest find . -name 'two*' -type f
./one/two/two_2.txt
./two/two_1.txt
-type
複数の選択肢があるファイルの種類
タイプパラメータ
標準ファイル
f
目次
d
シンボルリンク
l
キャラクタデバイス
c
ブロックデバイス
b
ソケット
s
FIFO
p
find
ファイルの検索は最初のステップですが、通常は削除、コピーなど、検索したファイルについていくつかの操作を行います-delete
一致するファイルを削除
➜ findtest tree
.
|____1.txt
|____one
| |____one_1.txt
| |____two
| | |____two_2.txt
|____three
| |____three_1.txt
|____two
| |____two_1.txt
➜ findtest find . -name 'three_1.txt' -delete
➜ findtest tree
.
|____1.txt
|____one
| |____one_1.txt
| |____two
| | |____two_2.txt
|____three
|____two
| |____two_1.txt
➜ findtest
前後の目次比較で削除したことが判明
three_1.txt
-exec
-delete
命令は単一削除のみ、より多くの操作を行う場合は使用のみ-exec
find
命令は利用可能-exec
他の命令と結合する.{}は、一致する各項目を表します..txt
コピーthree
中➜ findtest tree
.
|____1.txt
|____one
| |____one_1.txt
| |____two
| | |____two_2.txt
|____three
|____two
| |____two_1.txt
➜ findtest find . -name "*.txt" -exec cp {} ./three \;
cp: ./three/1.txt and ./three/1.txt are identical (not copied).
cp: ./three/one_1.txt and ./three/one_1.txt are identical (not copied).
cp: ./three/two_2.txt and ./three/two_2.txt are identical (not copied).
➜ findtest tree
.
|____1.txt
|____one
| |____one_1.txt
| |____two
| | |____two_2.txt
|____three
| |____1.txt
| |____one_1.txt
| |____two_1.txt
| |____two_2.txt
|____two
| |____two_1.txt
最後の結果は我々が予想したものであるが,中間に異常なヒントがあり,これはしばらく気にしないで,後続の選択肢を学習すればcp:./three/1.txt and ./three/1.txt are identical (not copied).
-path
オプション
-path
ワイルドカードでファイルパスを一致させることができる-name
ファイル名を一致させる-path
ファイルパスを全体として一致させるthree
中.txt
➜ findtest find . -name '*.txt' -path '**/three/**'
./three/1.txt
./three/one_1.txt
./three/two_1.txt
./three/two_2.txt
➜ findtest
!
'!'他の言語と同じように、「否定する、反逆する」という意味です.
three
中.txt
➜ findtest find . -name '*.txt' ! -path '**/three/**'
./1.txt
./one/one_1.txt
./one/two/two_2.txt
./two/two_1.txt
ありました'!'、'-path'、'-name'は私たちの上のcp異常を解決することができます
three
のうち.txt
、復元ディレクトリ➜ findtest find . -name '*.txt' -path '**/three/**' -delete
➜ findtest tree
.
|____1.txt
|____one
| |____one_1.txt
| |____two
| | |____two_2.txt
|____three
|____two
| |____two_1.txt
➜ findtest
.txt
コピーthree
中➜ findtest find . -name '*.txt' ! -path "**/three/**" -exec cp {} ./three \;
➜ findtest tree
.
|____1.txt
|____one
| |____one_1.txt
| |____two
| | |____two_2.txt
|____three
| |____1.txt
| |____one_1.txt
| |____two_1.txt
| |____two_2.txt
|____two
| |____two_1.txt
➜ findtest
今は警告が全くありません
atime、mtime、ctime
Unixファイルシステムの各ファイルには、3つのタイムスタンプがあります.
-atime
mtime
ctime
・find
の時間オプションとして、整数値を指定できます.単位は日です.通常前方には-
+
、-
より小さい、+
より大きい.txt
➜ findtest find . -name '*.txt' -atime -1
./1.txt
./one/one_1.txt
./one/two/two_2.txt
./three/1.txt
./three/one_1.txt
./three/two_1.txt
./three/two_2.txt
./two/two_1.txt
.txt
➜ findtest find . -name '*.txt' -atime +10
➜ findtest
このディレクトリは私が今日作成したので、一致していません.
分単位の時間オプションもございます
-size
find
のファイルサイズが短いオプション-size
1k
の.txt
➜ findtest find . -name '*.txt' -size -1k
./1.txt
./one/one_1.txt
./one/two/two_2.txt
./three/1.txt
./three/one_1.txt
./three/two_1.txt
./three/two_2.txt
./two/two_1.txt
その他の単位:
たんい
説明する
b
ブロック(512バイト)
c
バイト
w
ワード(2バイト)
k
1024バイト
M
1024 Kバイト
G
1024 Mバイト
-prune
一部のディレクトリを検索するには、いくつかのディレクトリをスキップしてパフォーマンスを向上させる必要がある場合があります.例えば
.git
.svn
あるディレクトリを検索パスから除外するというテクニックは
three
中.txt
➜ findtest find . \( -name "three" -prune \) -o \( -name '*.txt' \)
./1.txt
./one/one_1.txt
./one/two/two_2.txt
./three
./two/two_1.txt
➜ findtest find . ! -path "**/three/**" -name '*.txt'
./1.txt
./one/one_1.txt
./one/two/two_2.txt
./two/two_1.txt
➜ findtest
终止语:常用
find
探索世界~~