주어진 문자열 앞에 오는 파일을 알파벳순으로 찾습니다.

주어진 문자열 앞에 오는 파일을 알파벳순으로 찾습니다.

파일과 하위 디렉터리로 가득 찬 디렉터리가 있는 경우. 주어진 문자열 앞에 알파벳순으로 오는 일반 파일만 나열하는 가장 좋은 방법은 무엇입니까?

현재 bash로 할 수 있는 최선의 방법은 다음과 같습니다.

for x in `find . -maxdepth 1 -type f | sort`
do
   if [[ "$x" > './reference' ]]
   then
      break
   fi

   echo $x
done

이 작업을 수행하는 더 깔끔한 방법이 있는 것 같지만 그것이 무엇인지 잘 모르겠습니다. 어떤 아이디어가 있나요?

답변1

모두 필요하다면

 find . -maxdepth 1 -type f | sort |  awk '$0 > "./reference"'

먼저 필요하신 분들은

 find . -maxdepth 1 -type f | sort |  awk '$0 > "./reference"{print;exit}'

답변2

sed훨씬 더 간단 합니다 .

$ find -maxdepth 1 -type f | sort | sed '/^\.\/reference/,$d'

이는 정렬 후 참조 행(또는 더 큰 참조 행)과 마지막 행 뒤의 모든 행을 제거하는 것을 의미합니다.

여기서는 sed 'd' 명령이 주소 범위와 함께 사용됩니다. 여기서 '/^./reference/'는 범위의 시작이고 '$'는 범위의 끝입니다. (주소의 "$"는 마지막 줄을 의미합니다.)

답변3

필수 zsh 답변, 사용. 글로벌 예선일반 파일만 선택하고 e일치 항목 중에서 추가로 선택합니다.

echo *(.e\''[[ $REPLY > reference ]]'\')

답변4

예를 들어. script-name "$HOME" "reference"... find, 또는 의 경우처럼 항상 선행을 출력하지는 않습니다 ./. 따라서 파일 기본 이름만 필요하면 이것이 작동합니다. find binfind /tmp

고쳐 쓰다:다음에 추가줄이다()대소문자를 구분하지 않는 비교를 허용합니다.알파벳순으로질문에 언급 된 정렬 ...

#!/bin/bash
dir="$1"; ref="$2"
find "$dir" -maxdepth 1 -type f -printf "%f\n" | awk -v"ref=$ref" 'tolower($0) < tolower(ref)'

정렬해야 한다면 sortafter로 파이프하면 됩니다.awk

관련 정보