ls: 와일드카드 검색에서 동일한 패턴과 일치하는 디렉터리를 표시하지 않고 파일만 표시합니다.

ls: 와일드카드 검색에서 동일한 패턴과 일치하는 디렉터리를 표시하지 않고 파일만 표시합니다.

다음과 같은 일반적인 비즈니스 PC 상황이 있다고 가정해 보겠습니다.

drwxr-xr-x 1 whatever whoever       3 Oct  3 16:40 invoices2009
drwxr-xr-x 1 whatever whoever       4 Oct  3 16:40 invoices2010
drwxr-xr-x 1 whatever whoever       2 Oct  3 16:40 invoices2011
-rwxr-xr-x 1 whatever whoever  440575 Oct  3 16:40 tax2010_1
-rwxr-xr-x 1 whatever whoever  461762 Oct  3 16:40 tax2010_2
-rwxr-xr-x 1 whatever whoever  609123 Oct  3 16:40 tax2010_3

이제 게으르게 직접 입력해 보겠습니다.

$ ls -l *2010*

있다고 가정Invoice 2010 디렉토리의 일부가 예상대로 작동하지 않습니다. ~부터디렉토리 이름포함하다2010년연도, ls파일도 나열됩니다.2010년 송장, 현재 디렉토리에 있는 항목만 나열하고 싶습니다. 더 흥미로운 점은 Tax2010* 파일이 전혀 존재하지 않고, 예와 같이 3개의 디렉터리 대신 50개가 있다고 상상해 보세요. 예, 시도해 보았습니다. ls심지어는보여주다어떤 파일이 어떤 디렉토리에 있는지, 모든 파일이 현재 디렉토리에 있는 것처럼 위에서 아래로 나열합니다(해당 -R옵션을 명시적으로 지정하지 않는 한, 제가 확실히 알고 있습니다).

또한 이 작업을 수행하는 데에도 사용할 수 있다는 것을 알고 있지만 간단한 한 줄의 코드로 이 작업을 수행할 수 있는 find다른 방법이 있습니까 (분명히 해당 구문은 훨씬 간단합니다)?ls

답변1

귀하의 질문은 "디렉토리만 제외하고 패턴별로 파일을 나열하는 방법"인 것 같습니다 ls.

pure 에서는 이를 수행할 수 있는 방법이 없습니다 ls. ls+ 를 결합할 수 있습니다 grep. 예를 들면 다음과 같습니다.

ls -ld *2010* | grep -v '^d'

그러나 다음을 사용하는 것이 더 좋습니다 find.

find . -maxdepth 1 -type f -name "*2010*"

답변2

ls -dlp *2010*이는 솔루션의 좋은 시작이 될 수 있지만 원하는 출력 모양에 따라 다릅니다.

답변3

에서 언급한 대로 ls.you need find또는 만 사용할 수는 없습니다 .ls | grep러쉬의 대답. 그러나 귀하의 구체적인 예를 들어 답변하자면귀하의 의견:

다시 말하지만, 현재 디렉토리에 있는 세금* 파일을 나열하고 싶지만 "invoices2010" 디렉토리는 동일한 작업 디렉토리에 있고 주어진 파일과도 일치합니다.2010년목록에서 와일드카드 패턴을 건너뛰어야 합니다.

넌 할 수있어

ls -l --ignore='invoices*' *tax2010*

ignore쉘 패턴과 일치하는 모든 것을 필터링합니다 .

답변4

ls와 함께 grep을 사용하지 마십시오.

Bash에서는 이름에 "2010"이 있지만 숫자로 시작하지 않는 파일을 표시할 수 있습니다.

ls -l *[!0-9]2010*

관련 정보