Durchlaufen von Dateien in einem Ordner

Durchlaufen von Dateien in einem Ordner

Ich habe einen Ordner mit Dateien und muss diese mit dem Unix-Befehl „tr“ durchlaufen, wobei die Ausgabe möglichst denselben Namen wie zuvor haben muss (der folgende Code funktioniert nicht):

FILES=/root/Desktop/prova/*
for f in $FILES ; do
    echo "Processing $f file..."
    cat $f | tr "\n" "," > $f.tmp & mv $f.tmp $f 
done

Ich verstehe nicht, wie ich diesen Befehl verwenden cat "$f" | tr "\n" "," > "$f"und die Ausgabe jeder Datei umleiten kann. Dann sollte ich eine weitere For-Schleife verwenden, um N Tool-Befehle zu erstellen und diese zusammen auszuführen. Haben Sie Ratschläge für Schleifenstudien?

Antwort1

Das catist eine nutzlose Verschwendung von CPU-Leistung, vermeiden Sie es. Senden Sie die Ausgabe stattdessen an eine temporäre Datei und benennen Sie diese Datei anschließend wieder um:

tr x y < input > input.tmp && mv input.tmp input

Wenn moreutilses installiert ist, kann dies mit folgendem Programm erledigt werden sponge(das die temporären Dateien im Hintergrund ausführt):

tr x y < input | sponge input

Beachten Sie, dass durch derartige Umbenennungen möglicherweise ausgefallene ACL- oder Sicherheitskontexte zerstört werden, die für die nun eindeutig entkoppelte Originaldatei festgelegt wurden input.

verwandte Informationen