다음과 같은 일반적인 비즈니스 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
답변4
ls와 함께 grep을 사용하지 마십시오.
Bash에서는 이름에 "2010"이 있지만 숫자로 시작하지 않는 파일을 표시할 수 있습니다.
ls -l *[!0-9]2010*