2016-07-06 10 views
0

私は、IPアドレスオクテット(多くの場合最初の2つまたは3つ)&をマスク変数に置き換えるサニタイズプロセスに取り組んでいます。例えばディレクトリの一部の名前を変更します

192.168.100.10 = xxx.yyy.zzz.10 

これは(SEDありがとう)このTXTを含むファイルに対して行うのはとても簡単ですが、私は、同様のディレクトリのためにこれを行う必要があります。

私の質問は(余分なperlパッケージなどをインストールすることなく)完全なip &アドレス&を含むフォルダを見つける最良の方法は、マスクされた部分だけが置き換えられることです。例えば

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

ソースIPオクテット= $ IP &マスク値= $ IMASK

+0

1行のヘルパースクリプトで 'find'を見て、* substring replacement *と' mv'を実行しましたか? –

答えて

0

あなたはfindコマンドに余分なパッケージを考慮していない場合は、あなたが行うことができますfindwhileループ、またはfindと短い1行のヘルパースクリプトとしたいことを正確にはIPのみです任意のパス階層内のrs

:以下を含む一時ディレクトリ td

#!/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*") 

部分文字列の置換とともにfindwhileループを利用して、あなたは次のように何かを行うことができます

$ 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 

find-execと短い1行ヘルパースクリプトfindを一緒に使用すると、結果ツリーがスクリプトで再配置されたが、要求された操作が実行されるという不満があります。 findから警告を取り除くには、出力を/dev/nullにリダイレクトするだけです。あなたが行うことができます同じtd例を使用して(と同じ結果で):

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

ヘルパースクリプトは、以上のものになっていなけれ:

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

注意、renameコマンドも使用できますが、応じてあなたはutil-linuxからの実装を持っているかどうか、使用法は完全に異なっています。

ご不明な点がありましたら、お気軽にお問い合わせください。

+0

ありがとうございます!私はあなたの最初の例を利用して、私がすでに作成したものにコンセプトを統合することができました。これは素晴らしい! Btw、弁護士&エンジニア!?非常に興味深い組み合わせ! :) 再度、感謝します!! –

+0

はい、弁護士とエンジニア - 両極性障害のための完璧なセットアップです。私は実際に、2つのISPの金曜日の間に、特許請求の範囲に含まれる多くの問題が、Platypus ISP課金ソフトウェアとMSSQLバックエンドの操作を取り巻くケースを仲裁していたので、技術的側面を理解することは確実なプラスでした。あなたはポストでいくつかの助けを見つけることができてうれしいです。スクリプト作成には幸運です。 –

関連する問題