ディレクトリとそのサブディレクトリ内のすべてのphpファイルの最後に次のコードを追加する必要があります。
</div>
<div id="preloader" style="display:none;position: absolute;top: 90px;margin-left: 265px;">
<img src="ajax-loader.gif"/>
</div>
私は試しました
echo "my text" >> *.php
しかし、ターミナルはエラーを示しました:
bash : *.php: ambiguous redirect
私は何をすべきか。このコードセグメントを追加するには何百ものファイルがあり、各ファイルに追加するのは非常に困難です。前もって感謝します。
シェルを指定しないで、foreach
コマンドを試すことができます。 tcsh(および、bashで非常に類似したバージョンが利用可能であると確信しています)の下で、インタラクティブに次のように言うことができます。
foreach i (*.php)
foreach> echo "my text" >> $i
foreach> end
$i
は、ループを通過するたびに各ファイルの名前を引き継ぎます。
いつものように、多数のファイルを操作するときは、サンプルファイルを使用して小さなディレクトリでテストし、期待どおりに動作することを確認することをお勧めします。
エラーメッセージの.. bash
(質問にタグを付けます)。同等のループは
for i in *.php
do
echo "my text" >> $i
done
現在のディレクトリの下にある複数のディレクトリをカバーする場合は、指定できます
*/*.php
のではなく *.php
少しきれいに見え、一般的に1行に収まると思うので、私は通常Tシャツを使用します。
echo "my text" | tee -a *.php
BashFAQ/056 は、あなたが試みたことがうまくいかない理由を説明するというまともな仕事をします。ご覧ください。
(エラーに応じて)bashを使用しているため、for
コマンドは友達です。
for filename in *.php; do
echo "text" >> "$filename"
done
ファイルから「テキスト」を取得したい場合は、代わりにこれを行うことができます:
for filename in *.php; do
cat /path/to/sourcefile >> "$filename"
done
さて...あなたはmightサブディレクトリにファイルがあるでしょう。その場合、find
コマンドを使用してそれらを見つけて処理できます。
find . -name "*.php" -type f -exec sh -c "cat /path/to/sourcefile >> {}" \;
find
コマンドは、-name
や-type
などの条件を使用してどのファイルを識別するかを示し、-exec
コマンドは、前の「for」ループで示したものと基本的に同じ動作をします。最後の\;
は、これが-exec
オプションの引数の終わりであることをfind
に示します。
man find
で詳細を確認できます。
find
コマンドは移植性があり、特にソリューションを他のシステムに移植したい場合は、この種のアクティビティに一般的に推奨されます。ただし、現在bash
を使用しているため、bashのglobstar
オプションを使用してサブディレクトリを処理することもできます。
shopt -s globstar
for filename in **/*.php; do
cat /path/to/sourcefile >> "$filename"
done
この詳細については、man bash
を検索して「globstar」を検索してください。このオプションには、bashバージョン4以降が必要です。
[〜#〜] note [〜#〜]:あなたがしていることに他の問題があるかもしれません。 PHPスクリプトは?>
で終わる必要がないneedではないので、スクリプトはPHP code。
sed
とfind
を組み合わせて使用できます。あなたのプロジェクトツリーは
/MyProject/
/MyProject/Page1/file.php
/MyProject/Page2/file.php
etc.
/MyProject/
に保存します。 append.txt
と呼びます/MyProject/
から実行:
find . -name "*.php" -print | xargs sed -i '$r append.txt'
説明する:
find
はそのまま実行し、サブディレクトリを含むすべての.phpを探しますxargs
は、渡された(つまり実行されます)sed
は、見つかったばかりのすべての.phpに対してsed
が追加を行います。 「$ r append.txt」は、ファイルの末尾($)に移動し、append.txtにあるものをすべて書き込む(貼り付ける)ことを意味します。 -i
を忘れないでください。さもないと、追加されたファイルが印刷され、保存されません。あなたはすることができます(ファイルパスにスペースがあっても動作します):
#!/bin/bash
# Create a tempory file named /tmp/end_of_my_php.txt
cat << EOF > /tmp/end_of_my_php.txt
</div>
<div id="preloader" style="display:none;position: absolute;top: 90px;margin-left: 265px;">
<img src="ajax-loader.gif"/>
</div>
EOF
find . -type f -name "*.php" | while read the_file
do
echo "Processing $the_file"
#cp "$the_file" "${the_file}.bak" # Uncomment if you want to save a backup of your file
cat /tmp/end_of_my_php.txt >> "$the_file"
done
echo
echo done
PS:参照したいディレクトリからスクリプトを実行する必要があります