2017-11-30 4 views
0

Sagen wir, ich habe mehrere Dateinamen, z.B. R014-20171109-1159.log.20171109_1159. Ich möchte ein Shell-Skript erstellen, das für jedes gegebene Datum einen Ordner erstellt und die Dateien mit dem Datum dorthin verschiebt. Ist das möglich?Wie extrahiere ich das Datum aus mehreren Dateien mit Datumsangaben?

Für das Beispiel sollte ein Ordner "20171109" erstellt werden und hat die Datei "R014-20171109-1159.log.20171109_1159" darauf.

Dank

+1

Sicher ist es möglich. Was hast du versucht, und wo steckst du fest? –

+0

Ich weiß nicht, wie man das Datum mit einem regulären Ausdruck extrahiert. –

+0

Stellen Sie einige Codebeispiele bereit, die Sie ausprobiert haben, oder vielleicht einige Tutorials, denen Sie folgen wollten. – UditS

Antwort

0

gearbeitet Dies ist eine typische Anwendung eines for-loop in Bash, um durch Dateien zu iterieren. Gleichzeitig verwendet diese Lösung GNU [ shell param substitution ].

for file in /path/to/files/*\.log\.* 
do 

    foldername=${file#*-} 
    foldername=${foldername%%-*} 
    mkdir -p "${foldername}" # -p suppress errors if folder already exists 
    [ $? -eq 0 ] && mv "${file}" "${foldername}" # check last cmd status and move 

done 
0

Below-Befehle kann in Skript, dies zu erreichen gesetzt werden,

wie unten eine Variable mit dem aktuellen Datum vergeben (Verwendung --date = 'n Tag vor' Option, wenn Bedarf ein älteres Datum haben).

wenn Notwendigkeit, sie aus dem Dateinamen selbst erhalten erhalten Dateien in einer Schleife verwenden Sie dann schnitten Befehl, um die Datumszeichenfolge zu erhalten,

dirVar=$(date +%Y%m%d) --> for current day, 

dirVar=$(date +%Y%m%d --date='1 day ago') --> for yesterday, 

dirVar=$(echo $fileName | cut -c6-13) or 
dirVar=$(echo $fileName | cut -d- -f2) --> to get from $fileName 

mit dem Variablenwert Verzeichnis erstellen, wie unten, (-p. Verzeichnis erstellen, wenn nicht vorhanden)

mkdir -p ${dirVar} 

Verschieben von Dateien auf Verzeichnis zum Verzeichnis mit unterer Zeile,

mv *log.${dirVar}* ${dirVar}/ 
0

Da Sie ein Shell-Skript schreiben möchten, verwenden Sie Befehle. Um Datum, Verwendung cut cmd wie Ex:

cat 1.txt 
R014-20171109-1159.log.20171109_1159 
cat 1.txt | cut -d "-" -f2 

Ausgabe

20171109 

ist Ihr Datum und Ordner erstellen. Auf diese Weise können Sie Schleife und erstellen Sie so viele Ordner wie Sie

+0

Oder einfach "cut -d" - "-f2 1.txt", um eine [sehr häufige Unsitte] zu vermeiden (http://porkmail.org/era/unix/award.html);) –

0

Sein wollen eigentlich ganz einfach (meine Bash-Syntax ein wenig weg sein könnte) -

for f in /path/to/your/files*; do 

## Check if the glob gets expanded to existing files. 
## If not, f here will be exactly the pattern above 
## and the exists test will evaluate to false. 
[ -e "$f" ] && echo $f > #grep the file name for "*.log." 
#and extract 8 charecters after "*.log." . 
#Next check if a folder exists already with the name of 8 charecters. 
#If not { create} 
#else just move the file to that folder path 

break 
done 

Hauptidee ist, von diesem Posten link. Entschuldigung, dass ich nicht den tatsächlichen Code zur Verfügung gestellt habe, wie ich nicht immer vor kurzem auf Bash

Verwandte Themen