로그에서 조각난 파일만 필터링하는 방법은 무엇입니까?

로그에서 조각난 파일만 필터링하는 방법은 무엇입니까?

ext4방금 하드 드라이브의 파일 시스템 조각 모음을 마쳤다고 가정해 보겠습니다.

sudo e4defrag -v / > ~/defrag-2017-11-05 2>&1 &

이것은 아마도 불필요한 일이지만 어떤 파일이 조각화되었는지 확인하고 싶습니다.

로그는 다음과 같습니다.

==> defrag-2017-11-05 <==
ext4 defragmentation for directory(/)
[1/403415] "/"
    File is not regular file        [ NG ]
[2/403415] "/usr"
    File is not regular file        [ NG ]
[3/403415] "/usr/share"
    File is not regular file        [ NG ]
[4/403415] "/usr/share/ppp"
    File is not regular file        [ NG ]
[5/403415]^[[79;0H^[[K[5/403415]/usr/share/ppp/chap-secrets:    100%  extents: 1 -> 1   [ OK ]
[6/403415]^[[79;0H^[[K[6/403415]/usr/share/ppp/provider.chatscript: 100%  extents: 1 -> 1   [ OK ]
[7/403415]^[[79;0H^[[K[7/403415]/usr/share/ppp/provider.peer:   100%  extents: 1 -> 1   [ OK ]
[8/403415]^[[79;0H^[[K[8/403415]/usr/share/ppp/pap-secrets: 100%  extents: 1 -> 1   [ OK ]
[9/403415] "/usr/share/backgrounds"
    File is not regular file        [ NG ]
[10/403415] "/usr/share/backgrounds/linuxmint-retro"
    File is not regular file        [ NG ]
[11/403415]^[[79;0H^[[K[11/403415]/usr/share/backgrounds/linuxmint-retro/Gloria.jpg:    100%  extents: 1 -> 1   [ OK ]
[12/403415]^[[79;0H^[[K[12/403415]/usr/share/backgrounds/linuxmint-retro/aviatorjk_2441.jpg:    100%  extents: 1 -> 1   [ OK ]
[13/403415]^[[79;0H^[[K[13/403415]/usr/share/backgrounds/linuxmint-retro/theaeffect_3.png:  100%  extents: 1 -> 1   [ OK ]
[14/403415]^[[79;0H^[[K[14/403415]/usr/share/backgrounds/linuxmint-retro/multigons.jpg: 100%  extents: 1 -> 1   [ OK ]
[15/403415]^[[79;0H^[[K[15/403415]/usr/share/backgrounds/linuxmint-retro/Felicia.png:   100%  extents: 1 -> 1   [ OK ]
[16/403415]^[[79;0H^[[K[16/403415]/usr/share/backgrounds/linuxmint-retro/LinuxMint.png: 100%  extents: 1 -> 1   [ OK ]
[17/403415]^[[79;0H^[[K[17/403415]/usr/share/backgrounds/linuxmint-retro/air.jpg:   100%  extents: 1 -> 1   [ OK ]
[18/403415]^[[79;0H^[[K[18/403415]/usr/share/backgrounds/linuxmint-retro/curve.jpg: 100%  extents: 1 -> 1   [ OK ]
[19/403415]^[[79;0H^[[K[19/403415]/usr/share/backgrounds/linuxmint-retro/fizzy.jpg: 100%  extents: 1 -> 1   [ OK ]
[20/403415]^[[79;0H^[[K[20/403415]/usr/share/backgrounds/linuxmint-retro/silent_green.jpg:  100%  extents: 1 -> 1   [ OK ]
[21/403415]^[[79;0H^[[K[21/403415]/usr/share/backgrounds/linuxmint-retro/aviatorjk_2112.jpg:    100%  extents: 1 -> 1   [ OK ]
[22/403415]^[[79;0H^[[K[22/403415]/usr/share/backgrounds/linuxmint-retro/Emotion.jpg:   100%  extents: 1 -> 1   [ OK ]
[23/403415]^[[79;0H^[[K[23/403415]/usr/share/backgrounds/linuxmint-retro/pr09studio_spring.png: 100%  extents: 1 -> 1   [ OK ]
[24/403415]^[[79;0H^[[K[24/403415]/usr/share/backgrounds/linuxmint-retro/Talento-1.jpg: 100%  extents: 1 -> 1   [ OK ]
[324150/403415]^[[79;0H^[[K[324150/403415]/home/ruzena/StaM-EM->enM-CM-)/Altitude.2017.DVDRip.XviD.AC3-EVO/Altitude.2017.DVDRip.XviD.AC3-EVO.avi:   100%  extents: 20 -> 20 [ OK ]
[324290/403415]^[[79;0H^[[K[324290/403415]/home/ruzena/StaM-EM->enM-CM-)/Savage.Dog.2017.BRRip.XviD.AC3-EVO/Savage.Dog.2017.BRRip.XviD.AC3-EVO.avi: 100%  extents: 20 -> 20 [ OK ]
[325184/403415]^[[79;0H^[[K[325184/403415]/home/ruzena/StaM-EM->enM-CM-)/Death.Race.2050.2017.DVDRip.XviD.AC3-EVO/Death.Race.2050.2017.DVDRip.XviD.AC3-EVO.avi: 100%  extents: 20 -> 20 [ OK ]
[325356/403415]^[[79;0H^[[K[325356/403415]/home/ruzena/StaM-EM->enM-CM-)/Kong.Skull.Island.2017.TS.XviD.AC3-RUSSIAN.avi:    100%  extents: 20 -> 20 [ OK ]
[352147/403415]^[[79;0H^[[K[352147/403415]/home/ruzena/.cache/google-chrome/Default/Cache/d9b788060b0d42ce_0:     0%^[[79;0H^[[K[352147/403415]/home/ruzena/.cache/google-chrome/Default/Cache/d9b788060b0d42ce_0:  100%  extents: 5 -> 1   [ OK ]
[352943/403415]^[[79;0H^[[K[352943/403415]/home/ruzena/.cache/google-chrome/Default/Cache/d7789aeea4cbf251_1:     0%^[[79;0H^[[K[352943/403415]/home/ruzena/.cache/google-chrome/Default/Cache/d7789aeea4cbf251_1:  100%  extents: 5 -> 1   [ OK ]
[354676/403415]^[[79;0H^[[K[354676/403415]/home/ruzena/.cache/google-chrome/Default/Cache/98b71219db7f9992_1:     0%^[[79;0H^[[K[354676/403415]/home/ruzena/.cache/google-chrome/Default/Cache/98b71219db7f9992_1:  100%  extents: 5 -> 1   [ OK ]
[400977/403415]^[[79;0H^[[K[400977/403415]/home/ruzena/.local/share/zeitgeist/fts.index/postlist.DB:      0%^[[79;0H^[[K[400977/403415]/home/ruzena/.local/share/zeitgeist/fts.index/postlist.DB:   100%  extents: 5 -> 1   [ OK ]

유사한 도구에 대한 경험 이 없으므로 다음 사항을 awk알고 싶습니다.

로그에서 조각난 파일만 필터링하는 방법은 무엇입니까? 가능하다면...

전문가의 경우: 가장 많이 흩어져 있는 파일을 기준으로 파일을 정렬할 수 있으면 좋겠지만 이것이 이 질문에 답하기 위한 필수 사항은 아닙니다.

내가 보고 싶지 않은 줄은 다음으로 끝납니다.

... extents: 1 -> 1 [ OK ]

내가 보고 싶은 줄은 다음과 같이 끝납니다.

... extents: 5 -> 1 [ OK ]
...  extents: 20 -> 5   [ OK ]

5해당 위치에 분명히 1보다 큰 숫자가 있는 행을 표시하면 됩니다 .


편집하다:

명령을 시도해 볼 수 있는 자세한 조각 모음의 출력 예:

https://www.vlastimilburian.cz/public/linux/defrag-2017-11-05.bz2

추출하면 됩니다.

답변1

awk '{ if ($4!=$6) print $4 - $6" "$0_}' ~/defrag-2017-11-05 | sort -g 

awk를 사용하여 입력의 두 열을 비교하여 서로 다른지 확인하고 전체 행 다음에 오는 값의 차이를 인쇄합니다. 그런 다음 행 시작 부분에 추가된 차이를 기준으로 필터링된 행을 정렬합니다.

첫 번째 숫자가 1보다 큰 행을 확인하려면 다음을 사용할 수 있습니다.

awk '{ if ($4>1) print $0_}' ~/defrag-2017-11-05 | sort -gk4

여기서는 새로운 차이 열을 생성하는 대신 네 번째 열을 정렬합니다.

편집하다

파일 이름의 공백과 행 시작 부분의 이상한 문자를 처리하고 다른 행을 필터링하려면 다음을 사용하십시오.

awk '/extents: / { sub(/.*\]\//, "/"); sub(/:/, "", $1); if ($(NF-5)!=$(NF-3)) print $(NF-5) - $(NF-3)" "$1 }' ~/defrag-2017-11-05 | sort -g

다음은 읽기 쉽도록 형식이 잘 지정된 awk 스크립트입니다.

/extents: / { 
  sub(/.*\]\//, "/");
  sub(/:/, "", $1);
  if ($(NF-5)!=$(NF-3)) print $(NF-5) - $(NF-3)" "$1
}
  1. 존재하지 않는 행을 필터링합니다 extents:.
  2. 줄 시작 부분에서 의미 없는 내용을 제거 ]/하려면 시작 문자를 로 바꾸세요 ./
  3. :더 명확하게 하기 위해 파일 이름에서 제거됨
  4. 문자열 끝에서부터 계산하려는 두 필드를 비교하고 두 숫자에 차이가 있는 줄을 인쇄합니다.

관련 정보