누군가 이 unix grep 및 awk 명령문을 분석할 수 있습니까?

누군가 이 unix grep 및 awk 명령문을 분석할 수 있습니까?

누군가 이 말을 해석할 수 있나요?

sFileName=`ls -lrt $sTmpPath/$1* | grep ^- | grep -v grep |  head -1 | awk 'BEGIN { FS="/" } { print $NF }'`

여기

  1. $sTmpPathUNIX 서버의 임시 경로를 포함합니다.
  2. 전달된 첫 번째 매개변수는 파일 이름입니다.

감사합니다
Gautam

답변1

  • ls -lrt: 디렉토리가 아닌 매개변수를 나열하고콘텐츠해당 디렉토리 매개변수의 형식은 시간(수정 시간) 역순 (가장 오래된 것부터 최신 것까지) l의 ong 형식 입니다. 해야한다 .rtls -lrtd --
  • $sTmpPath/$1*: should be : "$sTmpPath/$1"*의 목적은 $sTmpPath내가 생각하는 이름으로 시작하는 파일 목록을 나열하는 것입니다 $1.
  • grep ^-. 여러 껍질 중에서 특별하기 grep '^-' 때문에 더욱 좋습니다 . ^로 시작하는 줄을 유지하세요 -. this 의 출력에서 ls -l​​이것은 다음 줄입니다.정기적인다른 유형의 파일(디렉토리, 심볼릭 링크, 소켓...)은 제외됩니다. 일부 파일 이름이나 기호 링크 대상에 개행 문자가 포함되어 있으면 거짓 긍정이 발생할 수도 있습니다.
  • grep -v grep. 제외 포함 grep아마도 이 기사를 쓴 사람은 이 ps | grep -v grep트릭에 대해 생각하고 있었을 것입니다. 여기에는 아무런 의미가 없습니다.
  • head -1. 고대 형태 head -n 1: 입력의 첫 번째 줄을 선택합니다. 따라서 가장 오래된 일치 파일의 줄입니다.
  • BEGIN{FS = "/"}: 사용하려는 awk 필드 구분 기호를 로 설정합니다 /.-F/
  • {print $NF}: 마지막으로 구분된 필드, 즉 파일 이름인 /마지막 필드 뒤의 줄 부분을 인쇄합니다. 및 의 작업 /awk완료될 수 있습니다 .grephead

$sTmpPath따라서 이 스크립트의 목적은 .로 끝나는 이름을 보고하는 것 같습니다 $1.

이는 다음과 같이 단순화되고 부분적으로 수정될 수 있습니다.

ls -nrtd -- "$sTmpPath/$1"* | awk -F/ '/^-/ {print $NF; exit}'

-n대신 이를 사용하여 -luids/gid를 사용자 이름/그룹 이름으로 불필요하게 변환하는 것을 방지하세요.

파일 이름이나 기호 링크 대상 모두 개행 문자를 포함하지 않는다고 가정합니다.

그것으로 zsh, 당신은 단지 oldest=($sTmpPath/$1*(.Om[1]:t)).

관련 정보