【49】【Linux】ファイル検索関連のコマンド
この記事を読むとLinuxのファイル検索関連のコマンドについて理解を深めることができます。
この記事は全てLinuCレベル1の内容です。
メタキャラクタ
まず、検索コマンドと一緒に使われるメタキャラクタについて説明します。
*
0文字以上の文字列にマッチする。0文字以上である点に注意。
?
任意の一文字にマッチする
[]
[]に列挙されている文字のいずれか一文字にマッチする。
連続した文字列には-が使える。
[a-z] [0-9]
[!]
[]に列挙されていない文字のいずれか一文字にマッチする。
{}
「,」で区切られた文字列にマッチする。
文字列の生成にも使われる。(とても便利です)
mkdir -p test/{1,2,3,4,5}/{1,2,3,4,5}/{a,b,c,d,e}
tree test
rm -fr test
注意点
findコマンドでメタキャラクタを使う際は""で囲ったほうがいい。
実例:間違ったコマンド
やりたいこと。testディレクトリ以下のtxtファイル全てを検索する。
find test -name *.txt
とすると意図しない結果になる。
原因:メタキャラクタの解釈
メタキャラクタはシェルによって展開されてからコマンドに渡すからです。
ケース1:
カレントディレクトリに a.txtというファイルが一つのみ存在する。
何も起きない
~/workspace/test % find test -name *.txt
~/workspace/test %
ケース:2
カレントディレクトリに a.txt、b.txtというファイルが2つ存在する。
エラーが発生
~/workspace/test % find test -name *.txt
find: b.txt: unknown primary or operator
今回のように、testディレクトリ以下txtファイルを全て検索したい場合は、引用符で囲ってメタキャラクタとして解釈されないようにする。
find test -name "*.txt"
ファイルの検索(findコマンド)
ファイル名
find -name
最終アクセス日
find -atime
最終更新日
find -mtime
アクセス件
find -perm
ファイルサイズ
find -size
ファイルの検索
find -type f
ディレクトリの検索
find -type d
シンボリックファイルの検索
find -type l
ユーザーの検索
find -user
階層を指定して検索
find -maxdepth
階層を指定して下から検索
find -mindepth
マッチしたファイルに対してコマンドの実行
find -exec {} \;
実例:あるRailsのアプリで過去5日以内に更新された、rbかerbファイルを検索する
find ./rails_app_name/ -type f -mtime -5 < find -name "*.*rb"
実例:testディレクトリ以下の全てのa.txtを削除する
サンプルの作成
mkdir -p test/{1,2,3,4,5}/{1,2,3,4,5}/{1,2,3,4,5}
touch test/{1,2,3,4,5}/{1,2,3,4,5}/{1,2,3,4,5}/{a,b,c,d,e}.txt
tree test
ファイルの削除
find test -name "a.txt" -exec rm -fr {} \;
tree test
実例:カレントディレクトリ以下から30日を超える日数の間、アクセスされていないファイルを検索して、削除する
find . -atime +30 -type f -exec rm -fr {} \;
実例:作業ディレクトリ内で10キロバイトを超えるディレクトリを検索する
find ./workspace -type d -size +10k
Linuxに関する記事一覧
参考文献
Ping_T
Linux教科書 LinuCレベル1 Version 10.0対応
最後に
私がブログを書く目的は、素晴らしい本や、素晴らしい方々の技術記事を知って頂きたいからです。ぜひ、上記の参考文献を見て下さい。(noteなので広告とかは一切ありません。)
現在、株式会社grabssに行くために最後の悪あがきをしています!!
現在の進行状況
49件目投稿。目標まで後1件。
よろしければ、スキボタン及びサポートお願いします。勉強の励みになります。