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.
Haben Sie sich 'find' mit einem 1-zeiligen Hilfsskript angesehen, um den * Substring-Ersatz * und den' mv' durchzuführen? –