同じディレクトリに別のファイルがある場合のファイルの検索

同じディレクトリに別のファイルがある場合のファイルの検索

私は「一行スクリプト」または非常に小さな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' {} \;

-execdirはい

に似ています-execが、指定されたコマンドは通常、検索を開始したディレクトリではなく、一致するファイルを含むサブディレクトリで実行されます。

-execdir指定されたコマンドは見つかったファイルと同じディレクトリで実行されるため、「隣のtest.php」ファイルはそこで機能します。ここでは、bash目的のタスクを実行するために、そのディレクトリで小さなスクリプトを起動して実行します。複雑なパス操作やファイルを再検索する必要はありません。上記ではファイルが存在するかどうかを確認しましたが、常に存在する場合(または無条件に作成したい場合)除外しますif

-execdirPOSIXではなくGNUルックアップ拡張ですが、ラベルを付けた可能性があります。知っておくべきこと環境変数には、または他の相対パスをPATH含めることはできません。.(空の要素を含む)セキュリティ上の理由から、環境要素がこのような場合は、まずリセットする必要がありますPATH=... find ...

おすすめ記事