フォルダ名やファイル名に含まれるスペース文字を回避する
例
1 |
$ find . -name '*.c' -print0 | xargs -0 grep 'pattern' |
説明
デフォルトの区切り文字はスペース文字。-print0 指定で区切り文字をNUL文字に変更する。xargsの区切り文字指定をあわせてNUL文字にすることで、フォルダ名やファイル名に含まれているスペース文字を区切り文字と誤認することを回避する。
検索ファイル名を xargs で受け取り、パイプライン後のコマンドに渡す
1 |
$ find . -type f -name '*.jpg' -print0 | xargs -0 -J % cp % ~/img/ |
-J
で置換文字を指定する。"%" がファイル名に置き換えられる。
検索ファイル名を引数にして exec で実行する。
1 |
$ find . -type f -name '*.jpg' -exec cp {} ~/img/ \; |
{}
: ファイル名に置き換えるられる。-
\;
: 単体実行。cpコマンドをファイル名毎に1回1回実行する。cp foo.jpg ~/img/
cp bar.jpg ~/img/
cp baz.jpg ~/img/
- …
アクセス制限のエラーを表示させない。
失敗例
1 2 3 4 5 |
% find . -name '*.asta' find: ./Pictures/写真ライブラリ.photoslibrary: Operation not permitted find: ./Desktop: Operation not permitted ... |
解決法 : 標準エラー出力をnullデバイスへリダイレクトする。
1 |
% find . -name '*.asta' 2>/dev/null |
ファイル名やフォルダ名の大文字/小文字を区別しない
例
1 |
$ find . -iname '*.c' |
説明
-inameを指定することで "foo.c" と "foo.C" の両方が検索される。
複数条件を指定する
例
1 |
$ find . \( -name '*.c' -o -name '*.h' \) |
説明
-o または -or で複数の条件を括弧で括って連結することができる。
ファイルのみを検索対象とする
例
1 |
$ find . -type f -name 'project.*' |
f
: ファイルd
: ディレクトリ
タイムスタンプで検索する
例. 30日以前に更新されたファイルを検索
1 |
$ find . -ctime -30 -type f |
例. 30日以降に更新されたファイルを検索
1 |
$ find . -ctime +30 -type f |
特定のフォルダを除外してファイル一覧を作成する
1 |
$ find . -type d -name '.git' -prune -o -type f -print |
オプションの意味をわかりやすくするために括弧で括った例
1 |
$ find . \( -type d -and -name '.git' -and -prune \) -or \( -type f -and -print \) |
ディレクトリ ".git" を除外(prune) し、ファイルをプリントする