ls에서 특정 파일을 제외


61

ls를 실행하고 출력에서 ​​특정 파일을 제외하고 싶습니다.

다음 명령을 실행하면 모든 파일을 한 줄에 하나씩 얻습니다.

$ ls -1
file1
file2
file3
temp

이 명령을 보여주는 방식으로 실행하고 싶습니다.

$ ls -1 <insert magic here> temp
file1
file2
file3

답변:


82
ls -I <filename>

-I = 파일 이름을 무시합니다. 즉, 지정된 파일을 나열하지 않습니다.

둘 이상의 파일을 무시하려면 각 파일 이름 앞에 -I 를 추가하십시오 .

ls -I file1 -I file2

예를 들어 이름 확장자로 파일을 무시하려면 다음을 수행하십시오.

ls -I "*.jpg" -I "*.svg"

4
당신이 긴 형식 옵션을 사용하는 경우 --ignore에는 글로브 패턴의 예에 그것을 확장 할 수 있습니다 ls --ignore="file?"또는ls --ignore="file*"
steeldriver

3
패턴을 인용하여 짧은 형태의 글로브 패턴을 사용할 수 있습니다.
verboze

18

-I를 한 번 사용하면 작동하지만 두 번 사용하면 작동하지 않습니다. 예 : ls -I *.csv작동합니다.

그러나 ls -I *.csv -I *.txt작동하지 않고 대신 txt 파일을 반환합니다.

- 나를 위해 속임수를 무시했습니다 . 이것이 내가 필요하고 일한 것입니다.

ls -lhrt --ignore="*.gz" --ignore="*.1"

이전 백업 로그를 제외하는 로그 폴더의 파일이 표시됩니다.


3
첫 번째 양식에서 * .csv를 인용하면 예를 들어 ls -I '*.txt'. 인용되지 않은 방식으로 작동하지 않는 이유는 쉘 확장 때문입니다. 즉, 쉘에 모든 csv 파일을 제외시키는 대신 나열하도록 지시합니다. 무엇 실제로 일어나는 것은 처음 .CSV 및 확장 후 0.1 파일을 무시하지만 나머지 나열
verboze

큰 따옴표도 저에게 효과적이었습니다. 감사합니다 @verboze
user38537

이것은 더 쉽다. 감사.
Philippe Delteil

6

ls --ignore={"*.jpg","*.png","*.svg"}


4
이것은 단순히 bash의 괄호 확장을 사용하여 세 가지 --ignore옵션 을 얻는 것 입니다. 또한 다음을 사용할 수도 있습니다--ignore="*."{jpg,png,svg}
muru

1

나는 이것이 당신이 찾고있는 출력을 생성한다고 생각합니다 :

ls -1 !(temp)

분명히 , 당신은 필요 shopt -s extglob가 작동하려면
(나는 그것이 활성화, 그래서 먼 과거의 어느 시간에 내가 유용하다고하고 활성화 추측).

grep을 사용하여 출력을 필터링 할 수도 있다고 생각합니다.

ls -1 | grep -v '^temp$'

파이프와 필터를 사용하면 훨씬 더 많은 유연성과 다른 명령 / 상황으로 전환 할 수있는 기술을 제공하지만이 경우에는 관심이 없을 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.