(56) findで検出したファイルに対してコマンドを実行

投稿者: | 2017年9月7日

この記事は最終更新から 401日 が経過しています。

やりたいこと

find で検出した個々のファイルに対して、任意のコマンドを実行したい。

方法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 の間には空白文字を入れること。 \) も同じ。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です