FC2ブログ

[find] カレントディレクトリ内ファイルのフルパス取得

■ カレントディレクトリ内ディレクトリ/ファイルのフルパスを取得するには、
  find コマンドの対象ディレクトリを `pwd` とすれば良い。
例)
Unix風パス)
find `pwd` -type d/f -mindepth 1 -maxdepth 1

Windows風パス)
find `pwd` -type d/f -mindepth 1 -maxdepth 1 | xargs -I{} ${DRIVE}${prefix}{}
→ ${DRIVE} = C: 等ドライブパス, ${prefix} = Unix環境格納ディレクトリ 等


参考文献:
■ findコマンドでファイルのフルパス名を取得する

スポンサーサイト



[find,xargs,grep] 特定ディレクトリ内の特定形式ファイル内文字列検索

■ 特定ディレクトリ内の特定形式ファイル内文字列検索を実施するには、2通りの手法が考えられる。
① find ディレクトリ -type f -name "*.拡張子" | xargs grep "pattern"
  → find にて特定形式ファイルを絞り込み、各々に対して grep 検索する。
② grep -r "pattern" --include="*.拡張子" ディレクトリ
  → grep に対して再帰オプションを設定し、
    --include オプションにて特定形式 (拡張子) を指定する。
    (※ 再帰オプションを設定しなければ、
    配下ディレクトリ内ファイルを検索する際に (ディレクトリであるとの) エラーが出る。)


参考文献:
■ [技術][unix] 再帰的なgrep。ファイルパターンを指定しない場合と指定する場合。
■ [Linux] 再帰的に grep を実行する

[find] 正規表現

■ 正規表現オプションにて、ディレクトリ名及びファイル名を正規表現に基づいて探索可能。
例) find ./ -type d/f -regextype "正規表現型" -regex "正規表現"

◆ 正規表現型
posix-basic/posix-egrep/posix-extended/posix-minimal-basic/
awk/gnu-awk/posix-awk/
grep/egrep/
ed/sed/
emacs/
findutils-default/

◆ 正規表現
各正規表現型に基づく。
→ エスケープの様が異なる等、各正規表現型での使い方を参照。


参考文献:
■ findでregextypeを指定すると捗る件
■ 正規表現に合致するファイル名をfindする方法

[getopt] /usr/bin/getopt によるオプション及び引数処理

■ /usr/bin/getopt により、オプション/オプション引数、及び、引数処理が可能。
→ getopt コマンドを1度呼び出すのみでは、1つのオプション/オプション引数しか処理出来ない為、
  複数オプション/オプション引数処理の為には、while ループとcase 構文を組み合わせることが必要。
→ 内部に於いては、setコマンドにより一旦中間文字列を生成し、それをwhile ループとcase構文にて処理する。 
尚、
→ オプションは引数より後に配置してもよい。
→ オプション表記は複数文字にも対応している。(ロングオプション対応)
→ 空白や特殊文字を含む場合には正常に処理出来ない。


参考文献:
■ bash によるオプション解析
■ [sh][DONE] getopts - コマンド "getopt", "getopts" の使い方を把握する

[xargs] bashスクリプト内ユーザー定義関数の実行

■ xargsから、bashスクリプト内ユーザー定義関数を直接的に実行することが出来ない為、
  export -f function_name
  にて、xargs以前に於いて、関数を一旦エクスポートする必要がある。
■ さらに、xargsからbashをコマンド引数付き (-c オプション) で呼び出す。
  bash -c "コマンド"
→ こうしなければ、xargs: func: No such file or directory というエラーで終了する。
→ さらに、引数内に " (ダブルクォート) を含む場合には、さらに \で (\"のように) エスケープする必要がある。

例)
#!/bin/bash
function func ()
{
  echo -e "filename = ${1}"
}
export -f func

find ./ -type f -name "*.txt" | xargs -t -I{} bash -c "func {}"

ちなみに、
→ -t ・・・ xargs での実行コマンド確認
→ -I{} ・・・ -Iオプション (引数代入文字変数指定) により、{}を引数代入文字変数として扱う。

参考文献:
■ xargsにbashのfunctionを渡す方法