Rausfinden eines Dateinamens wenn man nur die Endung hat

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
cnwund
Beiträge: 60
Registriert: 28.10.2010 10:06:36

Rausfinden eines Dateinamens wenn man nur die Endung hat

Beitrag von cnwund » 26.10.2011 18:44:34

Guten Tag liebe Gemeinde,

ich habe vor nach einer bestimmten Dateiendung zu suchen. Sobald er diese findet, soll er die ersten drei Zeilen auslesen. Zu dem Zeitpunkt wenn er die Datei findet, weiß er ja noch nicht genau wie die Datei denn heißt.
Er soll jedoch den Inhalt der Datei auslesen. Dazu habe ich erstmal folgendes Code geschrieben:

Code: Alles auswählen

if ls *.virus &> /dev/null; then
IPADRESSE=`sed -n '1p' /*.virus`
USERNAME=`sed -n '2p' /*.virus`
PASSWORT=`sed -n '3p' /*.virus`

echo Ihr Username ist $USERNAME, Die IP Adresse ist: $IPADRESSE, Das Passwort i$
else
echo Keine Datei gefunden
fi
Das finden der Datein klappt schon, jedoch meckert er dass er die Datei nicht auslesen kann. Deswegen ist quasi da wo die Datei aufgerufen wird zum auslesen der Dateiname noch einzufügen.

WIe bekomme ich den den raus?

Grüße

Christian

Benutzeravatar
detix
Beiträge: 1744
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Rausfinden eines Dateinamens wenn man nur die Endung hat

Beitrag von detix » 26.10.2011 20:16:16

So ungefähr:

Code: Alles auswählen

DateiName=$(basename *.virus)
echo $DateiName
bla.virus
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Rausfinden eines Dateinamens wenn man nur die Endung hat

Beitrag von r900 » 26.10.2011 20:28:36

Wieso schreibst du denn in den 3 Zeilen mit sed "/*.virus"? Mit dem slash vorne dran kann es ja so auch nicht gehen.
Wolltest du vielleicht "./" schreiben (dot slash)?

Und was soll passieren wenn mehrere Dateien da sind? Also da könntest du entweder ein

Code: Alles auswählen

for FILE in *.virus;do
...
done
nehmen, dann bearbeitet er alle Dateien oder du nimmst nur die neuste mit

Code: Alles auswählen

ls -t *.virus | head -n 1
Zuletzt geändert von r900 am 26.10.2011 20:30:39, insgesamt 2-mal geändert.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Rausfinden eines Dateinamens wenn man nur die Endung hat

Beitrag von Cae » 26.10.2011 20:29:29

Vielleicht wäre es sinnvoller, eine for-Schleife einzusetzen:

Code: Alles auswählen

for file in *.asdf; do
    if [ $(wc -l "$file") -ge "3" ]; then # TODO: dies ist nicht optimal (es funktioniert nicht), siehe nachfolgende Posts
        zeile1=$(head -1 $file)
        zeile2=$(head -2 $file | tail -1)
        zeile3=$(head -3 $file | tail -1)
        echo "aaaa $zeile1 asdf $zeile2 fdsa $zeile3 ffff"
    else
        echo "ups. Hier stimmt was nicht: $file"
    fi
done
Keine Ahnung, ob es tut, aber probier's mal aus.

Gruß Cae

--Edit: Vertipper mit den " Anführungszeichen korrigiert und kommentiert.
Zuletzt geändert von Cae am 27.10.2011 14:25:34, insgesamt 1-mal geändert.
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
Meillo
Moderator
Beiträge: 9280
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Rausfinden eines Dateinamens wenn man nur die Endung hat

Beitrag von Meillo » 27.10.2011 12:32:14

cnwund hat geschrieben:

Code: Alles auswählen

echo Ihr Username ist $USERNAME, Die IP Adresse ist: $IPADRESSE, Das Passwort i$
Huch, Passwort im Klartext 8O Naja.


Der Vorschlag mit der for-Schleife ist gut.

Und das Problem bisher war der Slash, wodurch die Pfadnamen absolut wurden.

Cae hat geschrieben:Vielleicht wäre es sinnvoller, eine for-Schleife einzusetzen:

Code: Alles auswählen

for file in *.asdf; do
    if [ "$(wc -l $file) -ge "3" ]; then
        zeile1=$(head -1 $file)
        zeile2=$(head -2 $file | tail -1)
[...]
Wenn auch ohne Schleife, cnwund hat wenigstens sed eingesetzt statt dieser head-tail-Kombinationen.

Wen's interessiert:

Code: Alles auswählen

sed -n '3p'
laesst sich noch zu

Code: Alles auswählen

sed '3!d'
verkuerzen. Ob man das lesbarer, obskurer oder cooler findet ueberlasse ich jedem selbst.
Use ed once in a while!

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Rausfinden eines Dateinamens wenn man nur die Endung hat

Beitrag von r900 » 27.10.2011 13:03:08

Cae hat geschrieben:

Code: Alles auswählen

if [ "$(wc -l $file) -ge "3" ]; then
Zwei Probleme bei dieser Zeile. Es fehlt ein Anführungszeichen bzw. es sind drei zu viel :wink: und wc gibt in dieser Form nicht nur die Anzahl der Zeilen aus sondern auch den Dateinamen. Deshalb funktioniert der Vergleich nicht.
Besser so:

Code: Alles auswählen

if [ $(cat $file | wc -l) -ge 3]; then

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Rausfinden eines Dateinamens wenn man nur die Endung hat

Beitrag von r900 » 27.10.2011 13:27:48

Wenn man mehrere Zeilen einlesen möchte ist das hier auch sehr praktisch:

Code: Alles auswählen

for i in {1..10}; do
zeile[i]=$(sed -n "${i}p" <dateiname>)
done

for i in {1..10}; do
echo ${zeile[i]}
done
Die Angabe eines Bereichs in der for Schleife geht soweit ich weiß ab bash 3.0. Es ist übrigens wichtig dass man hier bei sed Anführungszeichen anstatt ' benutzt, sonst wird i nicht durch die jeweilige Zahl ersetzt.

Benutzeravatar
Meillo
Moderator
Beiträge: 9280
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Rausfinden eines Dateinamens wenn man nur die Endung hat

Beitrag von Meillo » 27.10.2011 14:08:58

r900 hat geschrieben: Besser so:

Code: Alles auswählen

if [ $(cat $file | wc -l) -ge 3]; then
Noch besser so:

Code: Alles auswählen

if [ $(wc -l <"$file") -ge 3 ]; then
Use ed once in a while!

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Rausfinden eines Dateinamens wenn man nur die Endung hat

Beitrag von r900 » 01.11.2011 16:17:54

Meillo hat geschrieben: Noch besser so:

Code: Alles auswählen

if [ $(wc -l <"$file") -ge 3 ]; then
Eigentlich schon. Das habe ich mir aber abgewöhnt seitdem ich mal "<" und ">" verwechselt und mir eine wichtige Datei überschrieben habe ..passiert schon mal wenn man etwas übermüdet ist. 8O

Antworten