2013-03-19 3 views
1

에 작은 파일의 이름을 찾을 수는 디렉토리유닉스

이 작업을 수행 할 수있는 권리 명령은 무엇입니까에서 4 번째로 작은 (숨겨지지 않은) 파일의 이름을 찾을 수 있다고 가정? 내가 ls -l, head, tail, lineawk '{print}' 진술만을 알고있는 사람이라고 가정 해 보겠습니다. man ls에서

답변

2

: 크기의 내림차순으로 출력을 정렬 -S, -r

그래서 내 솔루션이 대안으로

ls -rS | sed -n '4p' 

또는

ls -rS | awk 'NR==4' 
+0

그래서 예를 들어 4 번째로 큰 파일을 찾아야한다면 어떻게해야할까요? 덕분에 – luc

+1

@luc 그냥'-r'을 버리십시오. –

0

구문 분석과 같을 것이다 출력의 순서를 반전 lsnot safe이므로 이상하고 c를 처리하기가 어렵고 오류가 발생하기 쉽습니다. 파일 이름에 공백과 개행 문자 같은 haracters.

null-terminated 줄 끝을 사용하기 때문에보다 강력한 다음 접근 방법을 사용하는 것이 좋습니다.

count=0 
while IFS= read -r -d '' line; do 
    ((++count == 4)) && echo "${line#* }" && break 
done < <(find . -type f -maxdepth 1 -printf '%s %p\0' | sort -zn) 
+0

'ls '를 파싱하는 것이 안전하지 않은 경우는 없습니다. 파일 이름에 공백, 개행 문자 및 제어 문자를 사용하는 것은 나쁜 결정입니다. –

+0

'find -print0'을 사용하지 않는 이유는 무엇입니까? –

+0

@larGray 같은'find' 명령에서'printf'와'print0'을 사용하면 파일이 두 번 출력됩니다. – dogbane