위의 질문에 대한 명령을 받았습니다. 누구든지 아래 명령을 설명해 주시겠습니까?
DATE=`date +%m%d%Y-%H%M%S` ; for i in `ls -lt *.log* | grep "Oct 11" | grep -E '12:|13:|14:' | awk '{print $9}'`; do zip logs_`hostname`_${DATE}.zip $i; done
답변1
귀하가 언급하고 있는 스크립트는 전혀 잘 작성되지 않았으며 예상대로 작동하지 않을 수 있습니다.
수행하는 작업에 대한 분석은 다음과 같습니다.
날짜=
date +%m%d%Y-%H%M%S
현재 날짜를 '10192016-171249'와 같은 형식으로 DATE에 저장합니다. 자세한 내용은 "남자 데이트"를 참조하세요. 그런데 이것은 날짜/시간을 저장하는 가장 좋은 방법은 아닙니다. 빠른 참조/정렬을 위해 날짜 부분에 YYYYMMDD 형식을 사용하는 것이 훨씬 더 선호됩니다.
ls -lt *.log*
현재 디렉터리에서 "*.log*" 패턴과 일치하는 모든 파일의 디렉터리 목록을 가져옵니다. 예를 들어 다음과 같을 수 있습니다.
-rw-r--r-- 1 root root 174106 Sep 30 17:28 dpkg.log.1
-rw-r--r-- 1 root root 1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm 272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm 272254 Oct 11 17:14 kernXX.log.1.gz
-rw-r----- 1 root adm 414 Sep 29 18:09 user.log.4.gz
-rw-r--r-- 1 root root 209 Sep 26 14:18 chipsee_clone.log
-rw-r--r-- 1 root root 1333 Apr 9 2015 pm-powersave.log.1
grep "10월 11일"
그런 다음 "Oct 11"이 있는 줄만 "추출"하여 다음을 제공합니다.
-rw-r--r-- 1 root root 1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm 272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm 272254 Oct 11 17:14 kernXX.log.1.gz
grep -E '12:|13:|14:
그런 다음 "12:", "13:" 또는 "14"가 존재하는 항목만 다시 추출합니다. (이 역시 시간 필드에 적용되지만 분 및 초 필드에도 적용되므로 매우 제대로 수행되지 않습니다.)
-rw-r--r-- 1 root root 1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm 272254 Oct 11 17:14 kernXX.log.1.gz
awk '{인쇄 $9}'
나머지 줄에서 9번째 요소(파일 이름)를 추출합니다.
fontconfig.log
zip 로그
hostname
_ _${DATE}.zip $i
위 명령 주위에 "for" 루프를 사용하면 각 파일이 이름이 다음과 같은 zip 파일에 추가됩니다.
logs_`hostname`_${DATE}.zip
hostname
호스트 이름은 어디에 있고 "${DATE}"는 이전에 저장된 날짜입니다. 따라서 호스트 이름이 BLUERAY이고 위의 DATE를 사용하는 경우 다음과 같은 파일 이름을 얻게 됩니다.
logs_BLUERAY_10192016-171249.zip
다시 말하지만, 이 스크립트는 매우 형편없게 작성되었으므로 스크립트 작성 방법을 배우기 위해 이 스크립트(또는 동일한 작성자가 작성한 다른 스크립트)를 사용해서는 안 됩니다...