2,166 views
1. やりたいこと
find で検出した個々のファイルに対して、任意のコマンドを実行したい。
2. やってみる
方法1: ベタなループで書く
文字数は増えるがわかりやすい。
for FILE in `find . -type f -name "*.txt"`;do ls -l $FILE done
方法2: xargsコマンドと連結する
これも便利だ。
find . -type f -name "*.txt" | xargs ls -l
xargs で明示的に引数を示すことも出来る。
find . -type f -name "*.txt" | xargs -IXXXXX ls -l XXXXX
方法3:findの-execオプションを使用
find の -exec オプションで実現するとこうなる。
find . -type f -name "*.txt" -exec ls -l {} \;
memo #1 : {} が検出したファイル名に置き換わる。
memo #2 : 最後は \; で締めくくる。
使用例1) 検出したtextファイルの中身を置換
find . -type f -name "*.txt" -exec sed -i -e "s/AAA/BBB/g" {} \;
使用例2) 検出したtextファイルとcssファイルの中身を置換
find . -type f \( -name "*.txt" -or -name "*.css" \) -exec sed -i -e "s/AAA/BBB/g" {} \;
注意: \( と -name の間には空白文字を入れること。 \) も同じ。