46

ディレクトリとそのサブディレクトリ内のすべての 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

私は何をすべきか。このコード セグメントを追加するファイルは数百あり、各ファイルに追加するのは非常に困難です。前もって感謝します。

4

6 に答える 6

109

私は通常、少しきれいに見え、一般的に1つのラインに収まると思うので、Tシャツを使用します.

echo "my text" | tee -a *.php
于 2014-01-10T22:42:01.270 に答える
22

シェルを指定しないで、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

于 2012-06-02T21:08:59.353 に答える
20

BashFAQ/056は、あなたが試したことがうまくいかない理由をうまく説明しています。見てください。

(エラーによると)bashを使用しているため、forコマンドはあなたの友達です。

for filename in *.php; do
  echo "text" >> "$filename"
done

ファイルから「テキスト」を取得したい場合は、代わりに次のようにすることができます。

for filename in *.php; do
  cat /path/to/sourcefile >> "$filename"
done

さて...サブディレクトリにファイルがあるかもしれません。その場合は、findコマンドを使用してそれらを見つけて処理できます。

find . -name "*.php" -type f -exec sh -c "cat /path/to/sourcefile >> {}" \;

このコマンドは、や などのfind条件を使用してファイルを識別し、前の "for" ループで示したのと基本的に同じことを実行します。最後は、これがオプションへの引数の終わりであることを示します。-name-type-exec\;find-exec

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 以降が必要です。

:あなたがしていることに他の問題があるかもしれません。PHP スクリプトはで終わる必要はない?>ため、スクリプトが PHP コードとして解釈しようとする HTML を追加している可能性があります。

于 2012-06-02T21:18:11.093 に答える
6

sed と組み合わせてお使いいただけますfind。プロジェクトツリーが

    /MyProject/ 
    /MyProject/Page1/file.php
    /MyProject/Page2/file.php
    etc.        
  1. に追加するコードを保存します/MyProject/。あれを呼べappend.txt
  2. 実行から /MyProject/:

    find . -name "*.php" -print | xargs sed -i '$r append.txt'
    

    説明:

    • findそのままで、サブディレクトリを含むすべての.phpを探します
    • xargssed見つかったすべての .php に渡されます (つまり、実行されます) 。
    • sed追記を行います。'$r append.txt' は、ファイル ($) の最後に移動し、append.txt にあるものをそこに書き込む (貼り付ける) ことを意味します。-iそうしないと、追加されたファイルが印刷され、保存されないことを忘れないでください。

ソース: http://www.grymoire.com/unix/Sed.html#uh-37

于 2014-01-25T05:31:19.733 に答える
2

あなたができること(ファイルパスにスペースがあっても動作します):

#!/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:参照したいディレクトリからスクリプトを実行する必要があります

于 2012-06-03T06:31:57.303 に答える