2016-07-06 9 views
0

Ich arbeite an einem Bereinigungsprozess, der IP-Adresse Oktette (in den meisten Fällen die ersten zwei oder drei) & ersetzt sie durch eine Maskenvariable.Rename Teil eines Verzeichnisses

Zum Beispiel:

192.168.100.10 = xxx.yyy.zzz.10 

Das ist ziemlich einfach für Dateien zu tun mit diesem txt (danke sed), aber ich brauche dies auch für Verzeichnisse zu tun.

Meine Frage ist (ohne Installation von zusätzlichen Perl-Paketen usw.), was der beste Weg ist, einen Ordner zu finden, der eine vollständige IP & Adresse & nur den maskierten Teil ersetzt enthält.

Zum Beispiel:

/logs/folder/192.168.100.10/data -> /logs/folder/xxx.yyy.zzz.10/data 

Wo Quell-IP-Bytes = $ IP & die Maskenwerte = IMASK $

+0

Haben Sie sich 'find' mit einem 1-zeiligen Hilfsskript angesehen, um den * Substring-Ersatz * und den' mv' durchzuführen? –

Antwort

0

Wenn Sie ein zusätzliche Paket der find Befehl nicht der Ansicht, die Sie tun können genau das, was Sie mit find und eine while Schleife oder find und eine kurze Zeile Zeile Hilfsskript tun möchten, solangeIP nur erscheinen rs einmal in einer beliebigen Pfadhierarchie.

Verwendung eine find und while Schleife zusammen mit Teilzeichenfolge Ersatz, können Sie etwas ähnliches tun:

#!/bin/bash 

srchdir="$1" 

export ip=192.168.100 
export mask=xxx.yyy.zzz 
while read -r line; do 
    mv "$line" "${line/$ip/$mask}" 
done < <(find "$srchdir" -type d -name "*$ip*") 

Beispiel

Mit einem temporären Verzeichnis td mit folgendem Inhalt:

$ tree td 
td 
├── 192.168.100.10 
│   └── data 
└── 192.168.100.20 
    └── data 

$ bash maskip.sh td 
$ tree td 
td 
├── xxx.yyy.zzz.10 
│   └── data 
└── xxx.yyy.zzz.20 
    └── data 

Mit find zusammen mit -exec und einem kurzen One-Line-Hilfsskript, find wird sich beschweren, dass Sie seinen Ergebnisbaum mit Ihrem Skript neu angeordnet haben, aber die angeforderte Operation ausführen wird. Um die Warnung von find loszuwerden, können Sie die Ausgabe einfach an /dev/null umleiten. Unter Verwendung des gleichen td Beispiel (und mit dem gleichen Ergebnis) Sie tun können:

$ ip=192.168.100; mask=xxx.yyy.zzz; \ 
find td -type d -name "*${ip}*" \ 
-exec ./helper.sh '{}' "$ip" "$mask" \; >/dev/null 2>&1 

Das Skript Helfer nichts ist mehr als:

#!/bin/bash 
mv "$1" "${1/$2/$3}" 

Hinweis, der rename Befehl auch zur Verfügung steht, sondern in Abhängigkeit von ob Sie die Implementierung von util-linux von nicht haben, sind die Verwendungen völlig unterschiedlich.

Schauen Sie vorbei und lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben.

+0

Danke! Ich war in der Lage, Ihr erstes Beispiel zu nutzen und die Konzepte in das zu integrieren, was ich bereits erstellt hatte. Das hat super funktioniert !! BTW, ein Anwalt und ein Ingenieur !?Sehr interessante Kombination! :) Danke noch einmal!! –

+0

Ja, Rechtsanwalt und Ingenieur - perfektes Setup für bipolare Störung. Ich entschied mich für einen Fall zwischen zwei ISPs am Freitag, bei dem viele Probleme in Zusammenhang mit den Manipulationen der Platypus ISP Billing Software und dem MSSQL Backend auftraten, so dass das Verständnis der technischen Aspekte ein definitives Plus war. Ich bin froh, dass Sie in der Post Hilfe gefunden haben. Viel Glück mit Ihrem Scripting. –