Bash
將類似名稱的日誌文件移動到多個目錄的有效方法
我在 CIFS 共享上有一個目錄,其中包含 10000 多個文件,其中
CCLLLTTTFFFFNNN YYYY-MM-DD
至少包含許多格式為. 在哪裡:
伺服器名稱包括:
CC
= ISO 國家名稱LLL
= 位置(最近城市的 IATA 程式碼)TTT
=WIN
或UNX
(以及為什麼它是 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 中搜尋目錄而不是更深
- 目錄名稱等於日誌文件名稱的第一部分
- 將任何被稱為伺服器的東西移動到目錄中,但時間更長