
私は「一行スクリプト」または非常に小さなbashスクリプトを書こうとしています。
ファイル(たとえば./xxx/one.php
)を見つけ、ファイルが存在する場合は、同じディレクトリ(たとえば)にある他のファイルを編集(printf
または使用)する必要があります。echo
./xxx/test.php
2番目の部分である既存のファイルを編集しましたが、「if」をどこに入れるのかわかりません。
実は私も似ています。
for file in `find . -name "test*.php"` ; do
(printf "It's me, on first line \n and me on second line\n" && cat $file) > "$file".bak && mv "$file".bak "$file"
done
そうだよね?
if [[ `find . -name "one*.php` ]]; do
for file in `find . -name "test*.php"` ; do
(printf "It's me, on first line \n and me on second line\n" && cat $file) > "$file".bak && mv "$file".bak "$file"
done
done
答え1
-execdir
ここにあるオプションはfind
便利です。
find -name 'one*.php' -execdir bash -c '
if [ -e test.php ] ; then
printf ... && mv test.bak test.php
fi' {} \;
に似ています
-exec
が、指定されたコマンドは通常、検索を開始したディレクトリではなく、一致するファイルを含むサブディレクトリで実行されます。
-execdir
指定されたコマンドは見つかったファイルと同じディレクトリで実行されるため、「隣のtest.php
」ファイルはそこで機能します。ここでは、bash
目的のタスクを実行するために、そのディレクトリで小さなスクリプトを起動して実行します。複雑なパス操作やファイルを再検索する必要はありません。上記ではファイルが存在するかどうかを確認しましたが、常に存在する場合(または無条件に作成したい場合)除外しますif
。
-execdir
POSIXではなくGNUルックアップ拡張ですが、ラベルを付けた可能性があります。知っておくべきこと環境変数には、または他の相対パスをPATH
含めることはできません。.
(空の要素を含む)セキュリティ上の理由から、環境要素がこのような場合は、まずリセットする必要がありますPATH=... find ...
。