파일과 하위 디렉터리로 가득 찬 디렉터리가 있는 경우. 주어진 문자열 앞에 알파벳순으로 오는 일반 파일만 나열하는 가장 좋은 방법은 무엇입니까?
현재 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 bin
find /tmp
고쳐 쓰다:다음에 추가줄이다()대소문자를 구분하지 않는 비교를 허용합니다.알파벳순으로질문에 언급 된 정렬 ...
#!/bin/bash
dir="$1"; ref="$2"
find "$dir" -maxdepth 1 -type f -printf "%f\n" | awk -v"ref=$ref" 'tolower($0) < tolower(ref)'
정렬해야 한다면 sort
after로 파이프하면 됩니다.awk