8

私はの線に沿って何かを使用しようとしています

unexpand -t 4 *.php

しかし、私がやりたいことをするためにこのコマンドを書く方法がわかりません。

奇妙なことに、

unexpand -t 4 file.php > file.php

空のファイルをくれます。(つまり、file.php を何も上書きしない)

複数のファイルを指定できますが、各ファイルを上書きする方法がわかりません。

IDE を使用できましたが、200 以上のファイルを置き換える のインスタンスが ~67000 あり、これにはしばらく時間がかかります。

私の質問への回答は標準の UNIX 運賃になると思いますが、まだ学習中です...

4

2 に答える 2

12

出力リダイレクトを使用して入力を置き換えることはほとんどありません。置換は、それを内部的にサポートするコマンドで機能します (基本的な手順自体を実行するため)。シェル レベルからは、次のように 2 つの手順で作業する方がはるかに優れています。

  1. foo に対して操作を実行し、foo.tmp を作成します。
  2. foo.tmp を foo に移動 (名前変更) し、オリジナルを上書きします

これは速いでしょう。もう少し多くのディスク容量が必要になりますが、次のファイルに進む前に両方の手順を実行すると、最大の単一ファイルと同じだけの余分な容量が必要になります。これは問題にはなりません。

スケッチ スクリプト:

for a in *.php
do
  unexpand -t 4 $a >$a-notab
  mv $a-notab $a
done

もっとうまくやれるかもしれませんが (エラーチェックなど)、それが基本的な概要です。

于 2009-07-07T11:35:00.063 に答える