findコマンドのメモ書きです。HDはホームディレクトリ。
find ~ -name hoge.txt -print
⇒HDにあるhogeという名前のファイルを標準出力する。
find ~ -name 'h*' -print
⇒HDにある先頭がhで始まるファイル一覧を標準出力する。ファイル名には(')シングルくぉーとをつける。
find . -empty -print | xargs ls -l
⇒かれんとでぃれくとり以下の空ファイルを一覧表示する。
■大文字と小文字を区別して検索
-nameはinsensitive、-inameはsensitive
■時刻のオプション
-ctime 数字(ファイルのステータスが最後に更新された日 n*24)
-mtime 数字(ファイルのデータが最後に更新された日 n*24)
-atime 数字(最後にファイルにアクセスした日 n*24)
> find . -type f -mtime -7 | xargs ls -lt
⇒カレントディレクトリ以下でここ7日間以内に更新されたファイルを一覧表示する。lsに渡している。
> find . -type f -mtime +7 | xargs ls -lt
⇒カレントディレクトリ以下で7日前以前に更新されたファイルを一覧表示する。
⇒find -mtime に指定する値の考え方
⇒find コマンドの -mtime は +1 でも2日前のファイルが対象
・除外
> find . -type f -mtime -7
⇒上は7日以内に更新されたファイルをカレントディレクトリから全て検索するが、カレントディレクトリの中にある特定のディレクトリだけは除外したい場合、下のようにする。
> find . -type d -name "hoge" -prune -o -type f -mtime -7
⇒カレントディレクトリにあるhogeディレクトリ以下は検索対象から除外している。-pruneは切り取る、取り除くという意味がある。 -oはorの事
■ファイルの種類のオプション(指定しないと両方)
d:ディレクトリ
f:ファイル
■複数条件
find . -name 'hoge*' -or -name 'moge*'
find . -name 'hoge*' -print -or -name 'moge*' -print
⇒or。カレントディレクトリ以下のファイル名がhogeかmogeで始まるファイル一覧を表示する。注意しないといけないのは、「find . -name 'hoge*' -or -name 'moge*' -print」と書くと、表示するファイルは、mogeだけの方になる。 -printを書く場合、両方に書かないといけない。
find . -name 'hoge*' -and -name '*.dat'
⇒and。カレントディレクトリ以下のファイル名がhogeで始まり.datで終わるファイル一覧を表示する。
■組み合わせ
> find . -name 'hoge*' -and -name '*.dat'
./hoge.dat
./hogeDir/hoge2.dat
> cat hoge.dat
hoge.dat line1
hoge.dat line2
> cat hogeDir/hoge2.dat
hoge2.dat line1
hoge2.dat line2
> cat `find . -name 'hoge*' -and -name '*.dat'`
hoge.dat line1
hoge.dat line2
hoge2.dat line1
hoge2.dat line2
⇒findで見つけたファイル一覧に対して、catを実行する。もちろんcat以外もできる。下はgrep。なお、シングルクォートとバッククォートを間違わないようにする。
> grep line1 `find . -name 'hoge*' -and -name '*.dat'`
./hoge.dat:hoge.dat line1
./hogeDir/hoge2.dat:hoge2.dat line1
⇒findのオプション-execを使ってもコマンドの組み合わせはできるけど、こっちの方がとっつきやすいと思う。
> find . -type f -print | xargs grep 'hoge'
⇒xargsを使う。同じディレクトリ階層とそのサブディレクトリ階層にあるファイルからhogeを検索する。
⇒grepコマンド
⇒find/grep/xargsコマンドを使いこなす
ls -lt `find .`
⇒lsとの組み合わせ。
find . | sed 's/.*\///'
パイプでsedに渡してディレクトリ名は削除する。
■その他
find /home/hoge [-type f]
⇒/home/hoge以下のディレクトリ(サブディレクトリ含む)、ファイルを一覧表示する。もしくは「find /home/hoge -name '*' -print」
find ~ \! -name hoge.txt -print
⇒\!は逆条件を表す。なので、ファイル名がhoge.txt以外のファイルを一覧表示する。
○
$ sudo find /* -name '*apache2*' -print | xargs file
ルートディレクトリ以下にapache2を含むファイル、ディレクトリを検索し、その結果一覧をxargsでfileコマンドに渡す。ただこれだと、/etc/apache2ディレクトリがあるはずなのに検索結果に出なかった・・・下だとでた・・・わからん
sudo find /etc/* -name '*apache2*' -print | xargs file
$ sudo find /* -type f -name '*apache2*' -print | xargs file
ファイルだけにしぼる
■いつか
・
find ~ -name hoge.txt -print
⇒HDにあるhogeという名前のファイルを標準出力する。
find ~ -name 'h*' -print
⇒HDにある先頭がhで始まるファイル一覧を標準出力する。ファイル名には(')シングルくぉーとをつける。
find . -empty -print | xargs ls -l
⇒かれんとでぃれくとり以下の空ファイルを一覧表示する。
■大文字と小文字を区別して検索
-nameはinsensitive、-inameはsensitive
■時刻のオプション
-ctime 数字(ファイルのステータスが最後に更新された日 n*24)
-mtime 数字(ファイルのデータが最後に更新された日 n*24)
-atime 数字(最後にファイルにアクセスした日 n*24)
> find . -type f -mtime -7 | xargs ls -lt
⇒カレントディレクトリ以下でここ7日間以内に更新されたファイルを一覧表示する。lsに渡している。
> find . -type f -mtime +7 | xargs ls -lt
⇒カレントディレクトリ以下で7日前以前に更新されたファイルを一覧表示する。
⇒find -mtime に指定する値の考え方
⇒find コマンドの -mtime は +1 でも2日前のファイルが対象
・除外
> find . -type f -mtime -7
⇒上は7日以内に更新されたファイルをカレントディレクトリから全て検索するが、カレントディレクトリの中にある特定のディレクトリだけは除外したい場合、下のようにする。
> find . -type d -name "hoge" -prune -o -type f -mtime -7
⇒カレントディレクトリにあるhogeディレクトリ以下は検索対象から除外している。-pruneは切り取る、取り除くという意味がある。 -oはorの事
■ファイルの種類のオプション(指定しないと両方)
d:ディレクトリ
f:ファイル
■複数条件
find . -name 'hoge*' -or -name 'moge*'
find . -name 'hoge*' -print -or -name 'moge*' -print
⇒or。カレントディレクトリ以下のファイル名がhogeかmogeで始まるファイル一覧を表示する。注意しないといけないのは、「find . -name 'hoge*' -or -name 'moge*' -print」と書くと、表示するファイルは、mogeだけの方になる。 -printを書く場合、両方に書かないといけない。
find . -name 'hoge*' -and -name '*.dat'
⇒and。カレントディレクトリ以下のファイル名がhogeで始まり.datで終わるファイル一覧を表示する。
■組み合わせ
> find . -name 'hoge*' -and -name '*.dat'
./hoge.dat
./hogeDir/hoge2.dat
> cat hoge.dat
hoge.dat line1
hoge.dat line2
> cat hogeDir/hoge2.dat
hoge2.dat line1
hoge2.dat line2
> cat `find . -name 'hoge*' -and -name '*.dat'`
hoge.dat line1
hoge.dat line2
hoge2.dat line1
hoge2.dat line2
⇒findで見つけたファイル一覧に対して、catを実行する。もちろんcat以外もできる。下はgrep。なお、シングルクォートとバッククォートを間違わないようにする。
> grep line1 `find . -name 'hoge*' -and -name '*.dat'`
./hoge.dat:hoge.dat line1
./hogeDir/hoge2.dat:hoge2.dat line1
⇒findのオプション-execを使ってもコマンドの組み合わせはできるけど、こっちの方がとっつきやすいと思う。
> find . -type f -print | xargs grep 'hoge'
⇒xargsを使う。同じディレクトリ階層とそのサブディレクトリ階層にあるファイルからhogeを検索する。
⇒grepコマンド
⇒find/grep/xargsコマンドを使いこなす
ls -lt `find .`
⇒lsとの組み合わせ。
find . | sed 's/.*\///'
パイプでsedに渡してディレクトリ名は削除する。
■その他
find /home/hoge [-type f]
⇒/home/hoge以下のディレクトリ(サブディレクトリ含む)、ファイルを一覧表示する。もしくは「find /home/hoge -name '*' -print」
find ~ \! -name hoge.txt -print
⇒\!は逆条件を表す。なので、ファイル名がhoge.txt以外のファイルを一覧表示する。
○
$ sudo find /* -name '*apache2*' -print | xargs file
ルートディレクトリ以下にapache2を含むファイル、ディレクトリを検索し、その結果一覧をxargsでfileコマンドに渡す。ただこれだと、/etc/apache2ディレクトリがあるはずなのに検索結果に出なかった・・・下だとでた・・・わからん
sudo find /etc/* -name '*apache2*' -print | xargs file
$ sudo find /* -type f -name '*apache2*' -print | xargs file
ファイルだけにしぼる
■いつか
・