$LETTER로 시작하거나 $LETTER 이후의 알파벳 문자로 시작하는 파일을 선택하세요.

$LETTER로 시작하거나 $LETTER 이후의 알파벳 문자로 시작하는 파일을 선택하세요.

디렉터리에 다음 파일이 포함되어 있다고 가정합니다.

  • 파일 1
  • 파일 2
  • b 파일
  • .c 파일
  • 문서
  • 파일 2
  • q 파일
  • 이 문서

$LETTER로 시작하거나 $LETTER 이후의 알파벳 문자로 시작하는 모든 파일을 선택하는 간단한 방법을 찾고 있습니다. $LETTER로 시작하는 파일이나 문자로 시작하는 파일을 찾기 위해 쉽게 수정할 수 있는 솔루션더 일찍알파벳의 $LETTER보다 더 유용합니다.

예를 들어 위 목록 LETTER=c에서 "cfile, ffile, ffile2, qfile, zfile"을 선택하고 싶습니다.

위의 예는 단순화된 예입니다. 실제로 이 디렉터리에는 수천 개의 파일이 포함됩니다. 결국 ls | tail -n${FUDGE_FACTOR}퍼지 요인을 수동으로 찾아내는 방법을 사용했는데, 이를 자동화할 수 있는 방법을 찾고 있습니다.

저는 셸 기반 솔루션을 찾고 있습니다(저는 BASH를 사용하지만 다른 셸의 솔루션도 환영합니다). 나는 쉘 스크립트가 이 작업에 가장 적합한 도구가 아닐 수도 있다는 것을 알고 있지만 순전히 관심에서 (쉘 스크립트에 대해 더 자세히 알아보기 위해) 이 질문을 하는 것이므로 python/perl/lua의 FAVE_SCRIPTING_LANGUAGE 답변에 회신하지 마십시오. /$

이러한 유형의 작업에 대한 쉘 스크립트의 제한 사항에 대한 일반적인 의견과 실제 생활에서 이러한 제한 사항을 해결하는 가장 좋은 방법(즉, "쉘 기반 솔루션이어야 합니다"라는 규정 없이)이 가장 환영받을 것입니다.

감사해요

답변1

실제로는 정말 쉽습니다.

echo [$LETTER-z]*

대소문자를 구분하려면 다음을 수행하세요.

echo [$(echo "$LETTER" | tr a-z A-Z)-Z$LETTER-z]*

이는 쉘이 실행되기 때문에 작동합니다.매개변수 확장앞으로경로명 확장(즉, 와일드카드).

답변2

쉘에 내장된 와일드카드를 사용하는 것은 어떻습니까?

LETTER=c; echo [$LETTER-z]*

이것은 bash와 ksh에서 작동합니다.

답변3

다음과 같은 스크립트를 사용할 수 있습니다.

START=c
END=q
ls | egrep ^[$START-$END].*

그러면 c부터 q까지 시작하는 모든 파일이 선택됩니다.

예제 출력:

[gbeech@svr01 test]$ echo  ^[$START-$END].*
^[c-q].*
[gbeech@svr01 test]$ ls | egrep ^[$START-$END].*
cfile
ffile
ffile2
qfile

또한 정규식을 조정하여 grep이 거의 모든 작업을 수행하도록 제한하도록 확장할 수도 있습니다.

관련 정보