Bash

將類似名稱的日誌文件移動到多個目錄的有效方法

  • September 17, 2021

我在 CIFS 共享上有一個目錄,其中包含 10000 多個文件,其中CCLLLTTTFFFFNNN YYYY-MM-DD 至少包含許多格式為. 在哪裡:

  • 伺服器名稱包括:

    • CC= ISO 國家名稱
    • LLL= 位置(最近城市的 IATA 程式碼)
    • TTT=WINUNX(以及為什麼它是 CIFS 共享)
    • FFFF= 伺服器的功能
    • nnn= 數字
  • 空間

  • 一個約會

  • 有時更多的文本包含帶空格的單詞

  • 副檔名(總是)

不再為公司工作的人設置了這個,所有伺服器都將他們的日常日誌全域轉儲到那裡*,載入文件列表需要很長時間!* 每個需要原木的人都會抱怨和抱怨 但從來沒有人做過任何事情,所以我開始為我做**一些事情。

想法:

為什麼不提供一個簡短的目錄列表,而不是一個長長的文件列表,其中包含伺服器名稱至少短 2 個數量級,以及cron每天將所有這些文件移動到目錄中的腳本?¹

我有什麼?

  • bash
  • 進入gcc
  • 對 CIFS 共享的寫入權限(顯然)
  • Manjaro,Arch 的衍生產品
  • 開發辦公室

到目前為止我做了什麼?

  • ls /mnt/logshare/*UNXSAP* > ~/Documents/logs/logshare.txt

  • 將 logshare.txt 導入 OpenOffice Calc

    • 使用伺服器名稱創建目錄
    • mv使用 Calc 和公式生成大量命令
  • 將其複制粘貼到 shell 腳本中

  • 執行shell腳本

但:

  • 我成了自己成功的犧牲品
  • 安全和應用程序組已經看到我的目錄突然出現,並希望我不要成為這樣的自我主義者,並為每個人都這樣做。
  • 沒有真正的開發人員,沒有真正的腳本編寫者。
  • 我已經考慮了一個星期,甚至不知道從哪裡開始。awk? find? 又開始寫C程式碼了?(20 多年沒有這樣做了。不幸的是,我變成了我一直害怕的東西:西裝……) ;-(
  • 每當添加新伺服器時,應自動創建一個目錄
  • 腳本應該每天執行

***有沒有人已經為他們自己的伺服器/數據文件集合解決了這個問題,並且已經有這樣一個bash腳本(C 源?)方便我可以修改?*如果沒有:請提供有用的提示?

**注 1:**是的,明智的做法是讓伺服器將其日誌轉儲到以伺服器名稱命名的目錄中,但這是推出、CAB 和其他令人頭疼的事情,比如動員全世界伺服器管理員…

為每個伺服器創建目錄

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
  • 在 logshare 中搜尋目錄而不是更深
  • 目錄名稱等於日誌文件名稱的第一部分
  • 將任何被稱為伺服器的東西移動到目錄中,但時間更長

引用自:https://unix.stackexchange.com/questions/669025