2009-07-07 5 views
4

Ich versuche, etwas entlang der Linien vonWie überschreiben Sie direkt mit 'unexpand' (Leerzeichen-zu-Tabs-Konvertierung)?

unexpand -t 4 *.php 

aber bin nicht sicher zu verwenden, wie man diesen Befehl zu schreiben, zu tun, was ich will.

Weirdly,

unexpand -t 4 file.php > file.php 

gibt mir eine leere Datei. (Das heißt Überschreiben file.php mit nichts)

ich mehrere Dateien in Ordnung geben kann, aber nicht wissen, wie man dann jede Datei überschreiben.

konnte ich meine IDE verwenden, aber es gibt ~ 67.000 Fälle von mehr als 200 Dateien ersetzt werden, und das wird eine Weile dauern.

Ich erwarte, dass die Antworten auf meine Frage (n) Standard-Tarif Unix sein werden, aber ich bin immer noch lernen ...

Antwort

9

Sie können sehr selten Ausgabeumleitung verwenden, um die Eingabe zu ersetzen. Ersetzen funktioniert mit Befehlen, die es intern unterstützen (da sie dann die grundlegenden Schritte selbst ausführen). Von der Shell-Ebene, dann ist es viel besser, in zwei Schritten zu arbeiten, etwa so:

  1. Sie den Vorgang auf foo, foo.tmp
  2. Move (umbenennen) foo.tmp zu foo erstellen, die ursprüngliche
  3. überschreiben

Dies wird schnell sein. Es wird ein bisschen mehr Speicherplatz benötigen, aber wenn Sie beide Schritte tun, bevor mit der nächsten Datei fortgesetzt, werden Sie nur so viel mehr Platz als die größte einzelne Datei benötigen, ist dies kein Problem sein sollte.

Sketch Skript:

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

könnten Sie besser (Fehlerprüfung, usw.), aber das ist die Grundzüge.

+3

Für Paranoia Willen tendiere ich dazu: unexpand -t 4 "$ a"> "$ a" -notab && mv "$ a" -notab "$ a" (das ist eine Menge Sicherheit für ein paar zusätzliche Zeichen). Auch die Zitate sind eine * wirklich * * gute * * Idee *. – ijw

+0

Dank Ihnen beiden, sehr hilfreich. Gibt es eine einfache Möglichkeit, die Datei Spiel rekursiv zu machen? – jezmck

Verwandte Themen