同様の名前のログファイルを複数のディレクトリに移動する効率的な方法

同様の名前のログファイルを複数のディレクトリに移動する効率的な方法

CIFS共有には、次の形式の多数のサーバーログファイルを含む10000を超えるファイルを含むディレクトリがあります。CCLLLTTTFFFFNNN YYYY-MM-DD 最低限度で。どこ:

  • サーバー名は次の部分で構成されます。
    • CC= ISO 国名
    • LLL=場所(最も近い都市のIATAコード)
    • TTT=WINまたはUNX(そしてCIFS共有である理由)
    • FFFF=サーバー機能
    • nnn=数値
  • スペース
  • 日付
  • 場合によっては、より多くのテキストにスペースを含む単語が含まれることがあります。
  • 延長(常に)

会社で働いていない人がこれを設定すると、世界中のすべてのサーバーがここに毎日ログをダンプします。そして、ファイルリストをロードするのに時間がかかります! 丸太が必要な人は誰でも泣き叫び、文句を言っている 文句を言うところで、誰も何もしないので、私が始めました。それについてただ私のために

アイデア:

長いファイルリストを持つ代わりに、短いディレクトリリスト(サーバー名を含む少なくとも2桁短い)と、cronすべてのファイルを毎日そのディレクトリに移動するスクリプトを使用するのはどうですか?^

私には何がありますか?

  • bash
  • 入力するgcc
  • CIFS共有への書き込みアクセス権(当然)
  • マンジャロ、アーチスピンオフ
  • 開発事務室

私は今まで何をしましたか?

  • ls /mnt/logshare/*UNXSAP* > ~/Documents/logs/logshare.txt
  • logshare.txtをOpenOffice Calcにインポートする
    • サーバー名を使用したディレクトリの作成
    • mvCalcと数式を使用した複数のコマンドの生成
  • これをコピーしてシェルスクリプトに貼り付けます。
  • シェルスクリプトの実行

しかし:

  • 私は私の成功の犠牲者になりました。
  • セキュリティグループとアプリケーショングループは、私のディレクトリが表示されたことを見て、私が自己中心的な行動を止め、それを行うことを望んでいました。みんな
  • 本当の開発者もなく、本当のスクリプトもありません。
  • 一週間これについて考えてみましたが、どこから始めるべきかさえわかりません。awkfind? Cコードの記述を再開しますか? (20年以上これをやったことはありません。残念ながら私はいつも恐れていました。スーツ...) ;-(
  • 新しいサーバーが追加されるたびに、ディレクトリが自動的に作成されます。
  • スクリプトは毎日実行する必要があります。

自分のサーバー/データファイルの収集について、この問題をすでに解決してbash修正できるスクリプト(Cソース?)を持っている人はいますか?そうでない場合:役に立つヒントを提供してください。

注1:はい、サーバーにサーバー名を付けたディレクトリにログをダンプさせることは賢明ですが、展開、CAB、および世界中のすべてのサーバー管理者を動員するなど、他の面倒な作業が必要です。 ..

答え1

各サーバーのディレクトリの作成

find /var/mnt/logshare/ -maxdepth 1 -type f | cut -d' ' -f1 | sort -u |
while read server ; do
  mkdir "$server"
done

私たちがすること:

  • -type fサブディレクトリではなくlogshareディレクトリからファイル(およびファイルのみ)を検索する(-maxdepth 1
  • サーバー名はファイル名の最初のスペースで区切られた部分なのでcut
  • 並べ替えだけで-u一意のアイテムを維持する
  • クリックするたびに目次を作成する

それに応じてファイルを移動してください。

find /var/mnt/logshare -maxdepth 1 -type d | 
while read server ; do
   mv "$server?*" "$server"
done
  • ログ共有からディレクトリを検索しますが、より深く検索することはありません。
  • ディレクトリ名は、ログファイル名の最初の部分と同じです。
  • サーバーと呼ばれますが、より長いコンテンツをディレクトリに移動します。

答え2

努力する、

cd /path/to/files/ || exit
for f in *' '*; do
    mkdir -p -- "${f%% *}" &&
      mv -- "$f" "${f%% *}/"
done

関連情報