Ich habe ein Verzeichnis mit vielen kompilierten C-Programmen, die ich sichern möchte. Momentan haben sie die Namen, program.out
aber ich möchte das gerne in nur ändern program
.
Wäre es trotzdem möglich, diese auszuschließen? Und welche Art von regulärem Ausdruck würde ich verwenden, um sie alle schnell umzubenennen?
Antwort1
Verwenden Sie zum Sichern Ihres Codes Git oder eine andere Versionskontrollsoftware. Im Internet gibt es viele Möglichkeiten, um nur einige zu nennen: GitHub, Bitbucket.
In Git haben Sie die Datei .gitignore. Wenn Sie dort *.out hinzufügen, wird sie nicht in das Repository übertragen.
Antwort2
program.out
Ihre erste Frage ist mir nicht ganz klar. Wenn Sie umbenennen möchten, program
führen Sie einfach Folgendes aus:
mv program{.out,}
Zur zweiten Frage und angenommen, ich möchte eine Liste von Dateien /etc
mit einem Suffix erhalten:
#!/bin/bash
ls /etc > /tmp/etcfiles
while read line
do
if [[ $line =~ \..+ ]]; then
echo $line
fi
done < /tmp/etcfiles
Die oben genannten Angaben können Sie nach Bedarf anpassen.
\.
entspricht einem wörtlichen Punkt..
passt zu jedem Zeichen nach dem Punkt.+
besagt, dass auf den ersten Punkt mindestens ein Zeichen folgen muss. Dies entspricht alsotest.c
, aber nicht . Wenn Sie auchtest.
eine Übereinstimmung wünschen , ändern Sie das in ein .test.
+
*
Antwort3
Wenn Sie Bash als Shell verwenden, ist dies eine einfache Aufgabe für eine Shell-Pipeline.
ls | grep '\.out$' | while read file; do echo mv "$file" "${file%.*}"; done
ls
erstellt eine Liste der Dateien im Verzeichnis.
grep '\.out$'
extrahiert die Dateinamen, die auf .out enden und verwirft den Rest.
while read file
liest die Dateinamen einzeln.
echo mv "$file" "${file%.*}"
zeigt einen MV-Befehl an, der jede Datei in eine Version ohne Erweiterung umbenennen würde, führt ihn aber nicht aus. Das ${file%.*}
Problem ist die Bash-Syntax zum Entfernen einer Dateierweiterung. Wenn Sie davon überzeugt sind, dass die Pipeline das gewünschte Ergebnis erzielen würde, wenn sie tatsächlich ausgeführt würde, entfernen Sie den echo
Teil und lassen Sie sie tatsächlich ausführen.
ls | grep '\.out$' | while read file; do mv "$file" "${file%.*}"; done