
Ich schreibe ein Skript, um ein Verzeichnis mit dem Namen des heutigen Datums (yyyy_mm_dd) zu erstellen und dann alle Dateien, die mit dem heutigen Datum enden, in dieses Verzeichnis zu verschieben. Gibt es eine bessere Möglichkeit, die Dateien in das Verzeichnis zu verschieben, da das, was ich getan habe, auch das Verzeichnis auswählt?
now=$(date '+%Y_%m_%d')
mkdir $now
mv *$now $now/
Antwort1
mv *?"$now" "$now/."
stellt sicher, dass Ihr gerade erstelltes Verzeichnis nicht zum Verschieben ausgewählt wird, indem mindestens ein Zeichen ( ?
) vor dem Zeitstempel stehen muss.
Antwort2
Der find
Befehl kann sowohl nach Dateitypen als auch nach Dateinamen filtern.
Ich denke also, dass dies das gewünschte Ergebnis liefert:
now=$(date '+%Y_%m_%d')
find . -name "*$now" -type f -print0 | xargs -0 mv -t $now/
Sie sollten jedoch darüber nachdenken, ob Ihre Dateinamen Unregelmäßigkeiten aufweisen (z. B. andere Verzeichnisse, die die Datumszeichenfolge enthalten), bevor Sie dies für einen großen Stapel ausführen.