welche Shell/ Kommandos für Zeichenkettenopreationen?

G

Gayson

Jungspund
Hallo!

Ich möchte ein kleines Skript schreiben, welches aus einem bestimmten Verzeichnis das Unterverzeichnis mit dem neuesten Datum (bei mir sind Ordner nach dem Prinzip "YEAR-MONTH-DAY_HOUR~MINUTE" benannt) herausfindet.
Gibt es in Unix irgendwelche Kommandos, die sowas können? Oder wie könnte ich das am Besten realisieren

Danke für eure Anregungen!
Liebe Grüße,
Kai

P.S.:
Soweit bin ich in Prinzip schon (Bourne Shell):
Code:
$verzeichnis
for i in `ls`
do
    if [ -d $i ] # falls $i ein Verzeichnis
    then
        if [ $verzeichnis ] # falls $verzeichnis schon gesetzt
        then
             # hier muss jetzt überprüft werden, ob
             # $i neuer ist als $verzeichnis
        else
            $verzeichnis=$i
        fi
    fi
done
 
Warum selber sortieren, wenn dies ls macht? Ich würde für Dein Problem find preferieren, da man damit direkt auf Verzeichnisse testen kann:

Code:
find -s . -type d -maxdepth 1 | tail -1

Gruss, Xanti
 
Danke für deine schnelle Antwort!
Irgendwie kennt er den Schalter -s für find bei mir nicht... Und ohne -s gibt er mir immer ./ÄltestesVerzeichnis aus.

Meinst du eigentlich, das find könnte meine Schleife ersetzen? Oder sollte ich find als if-Abfrage nehmen?

Achso, hast du eine Übersicht für Zeichenkettenoperationen in der Bourne-Shell? Ich würde gerne z.B. gerne ein Verzeichnis nach dem Typ "YEAR-MONTH-DAY_HOUR~MINUTE" nach dem aktuellen Datum/ Uhrzeit dynamisch zusammenbauen, also sowas wie (Pseudocode)
Code:
$neuesverzeichnis = time %Y "-" time %m "-" time %Y "-" time %d "_" ...
 
Gayson schrieb:
Danke für deine schnelle Antwort!
Irgendwie kennt er den Schalter -s für find bei mir nicht... Und ohne -s gibt er mir immer ./ÄltestesVerzeichnis aus.

Da musst Du mal in "man find" schauen, wie man find zum sortieren bringt. Zur Not tuts auch ein "find ... | sort". Ich habe anfänglich "head -1" benutzt, es anschliessend in "tail -1" geändert. Nicht dass Du das "head -1" genommen hast und deswegen das ältestete Verzeichnis bekommst.

Gayson schrieb:
Meinst du eigentlich, das find könnte meine Schleife ersetzen? Oder sollte ich find als if-Abfrage nehmen?

Es ersetzt komplett Deine for-Schleife:

Code:
find . -type d -maxdepth 1 | tail -1 | xargs dosomething

Bezüglich xargs musst Du Dir mal die man-Page anschauen, da sich meine FreeBSD-Version höchstwahrscheinlich von Deiner unterscheidet.
Für komplexe Arbeiten geht auch

Code:
for dir in $(find . -type d -maxdepth 1 | tail -1); do
  echo $dir
  mv $dir ...
done

Gayson schrieb:
Achso, hast du eine Übersicht für Zeichenkettenoperationen in der Bourne-Shell? Ich würde gerne z.B. gerne ein Verzeichnis nach dem Typ "YEAR-MONTH-DAY_HOUR~MINUTE" nach dem aktuellen Datum/ Uhrzeit dynamisch zusammenbauen, also sowas wie (Pseudocode)
Code:
$neuesverzeichnis = time %Y "-" time %m "-" time %Y "-" time %d "_" ...

Da ich persönlich die bash nutze, kann ich Dir nur Tipps für die bash geben, vielleicht sind sie auch in der bourne Shell gültig. Deinen Pseudocode würde dann so aussehen:

Code:
neuesverzeichnis="$(time %Y) - $(time %m) - $(time %Y) - $(time %d)..."

Wahrscheinlich sieht die Befehlssubstitution anders aus, also statt $(..) womöglich `..`. Obiges lässt sich auch einfach durch

Code:
neuesverzeichnis="$(date "+%Y - %m - %Y - %d")"

erreichen.

Gruss, Xanti
 
Zuletzt bearbeitet:

Ähnliche Themen

[gelöst] - for file in ... nur für bestimmte Endungen?

Shell Skript beschleunigen

Queue für copy Script

Hilfe bei Scriptanpassung für VMWare 5.1 HA und USV Shutdown

Last mit etc/passwd anzeigen lassen

Zurück
Oben