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로 가져오기
- 서버 이름을 사용하여 디렉터리 생성
mv
Calc 및 수식을 사용하여 다수의 명령 생성
- 이것을 복사해서 쉘 스크립트에 붙여넣으세요.
- 쉘 스크립트 실행
하지만:
- 나는 내 성공의 희생자가 되었습니다.
- 보안 및 애플리케이션 그룹은 내 디렉터리가 나타나는 것을 보고 내가 자기중심적인 행동을 멈추고 이를 위해 그렇게 하기를 원했습니다.모든 사람.
- 진짜 개발자도 없고, 진짜 스크립터도 없습니다.
- 일주일 동안 이것에 대해 생각해 봤는데 어디서부터 시작해야 할지조차 모르겠습니다.
awk
?find
? 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