2016-08-31 1 views
0

Meine Protokolldatei ist im Format upd_yyyymmdd_slr.stats. Ich möchte zum Beispiel zwischen zwei Daten alle Dateien von einem Server auf meinen lokalen Server kopieren.scp alle Protokolldateien von Muster filename_date zwischen 2 Daten in Shell-Skript

Ich möchte alle Dateien mit Daten in der Protokolldatei als 20151228 und 20160103 bedeutet, ich möchte die folgenden Dateien aus einer Reihe von vielen Dateien kopieren.

upd_20151228_slr.stats 
upd_20151229_slr.stats 
upd_20151230_slr.stats 
upd_20151231_slr.stats 
upd_20160101_slr.stats 
upd_20160102_slr.stats 
upd_20160103_slr.stats 

Ich verwende den folgenden Befehl, aber es funktioniert nicht

scp server:/reports/logs/upd_20[15-16][12-01][29-03]*slr* ./log_files 

finden Sie mir die beste Weise, die ich

Antwort

0

Check-out sowie in Shell-Skripten in Linux tun dies Skript:

#!/bin/bash 

for i in `ls upd_*_slr.stats`; do 
    # First strip off prefix and suffix strings. 
    s=`echo $i | sed 's/upd_//g' | sed 's/_slr.stats//g'` 
    if [[ $s -ge 20151230 && $s -le 20160102 ]]; then # Modify dates as needed 
    echo $i 
    cp $i /path/to/dest/dir 
    fi 
done 

EDIT:

Bei einem Remote-Server könnte man dies versuchen:

#!/bin/bash 

for i in `ssh [email protected] ls /path/to/dir/upd_*_slr.stats`; do 
    i=${i##*/} 
    # First strip off extra strings leaving only date. 
    s=`echo $i | sed 's/upd_//g' | sed 's/_slr.stats//g'` 
    if [[ $s -ge 20151230 && $s -le 20160102 ]]; then # Modify dates as needed 
    echo $i 
    scp [email protected]:/path/to/dir/$i /path/to/dest/dir 
    fi 
done 
+0

Hallo ottoshmidt Bitte, da dies vorschlagen wird funktionieren, wenn ich die Dateien aus dem Verzeichnis kopieren will auf dem gleichen Server von einem Ort zum anderen. Aber ich möchte von 1 Server zu einem anderen kopieren. Wie ich von abc.x.com eingeloggt bin und ich von qwe.x.com kopieren möchte dann, wie kann ich das scp. –

+0

habe 5 Dateien erstellt und führe diesen Code aus, als bekomme ich Fehler, wenn ich nur diesen Code ausführe -> shellt.sh: 6: shellt.sh: [[: nicht gefunden shellt.sh: 6: shellt.sh: [[: nicht gefunden shellt.sh: 6: shellt.sh: [[: nicht gefunden shellt.sh: 6: shellt.sh: [[: nicht gefunden shellt.sh: 6: shellt.sh: [[: nicht gefunden shellt.sh: 6: shellt.sh: [[: nicht gefunden –

+0

Es ist ein Bash-Skript, das nicht ausgeführt werden kann, wenn Sie es mit Shell (sh) ausführen. Stellen Sie außerdem sicher, dass vor und nach den [[und]] - Klammern ein Leerzeichen steht. – ottoshmidt

Verwandte Themen