디렉토리에서 심볼릭 링크 제외

디렉토리에서 심볼릭 링크 제외

디렉토리 목록에서 심볼릭 링크를 제외하고 싶습니다. 나는 다음 명령을 사용하고 있습니다 :

dir --ignore=@ -F

그러나 기호 링크는 표시된 대로 계속 나열됩니다.

https://i.stack.imgur.com/kWxi4.png

dir 명령을 사용할 때 이를 제외하는 방법은 무엇입니까?

감사해요.

답변1

find다음을 사용하여 심볼릭 링크를 제외 할 수 있습니다 .

find -maxdepth 1 ! -type l ! -path './.*' -ls

! -type l심볼릭 링크는 제외했습니다 . 따라서 디렉토리, 일반 파일, 특수 파일 등이 표시됩니다. 숨겨진 파일을 제외
했습니다 ! -path './.*'(예 .bashrc: , .profile)

출력을 원하거나 다음을 ls사용해야 dir하는 경우:

#With color
find -maxdepth 1 ! -type l ! -path './.*' -exec ls --color=yes -Fd {} +

#No color
find -maxdepth 1 ! -type l ! -path './.*' -exec ls -Fd {} +

답변2

쉘을 사용하면 zsh다음을 사용할 수 있습니다.글로벌 예선전역 확장자에서 유형별로 파일을 필터링합니다.

dir -Fd -- *(^@)

dir현재 디렉토리에 숨겨져 있지 않은 파일을 호출합니다아니요( ^) 유형심볼릭 링크( @)를 매개변수로 사용합니다.

목록만 보기만 하면 내장 함수 dir(또는 이에 상응하는 Unixy 함수)를 호출할 필요도 없고 그냥 ls전달하면 됩니다 .zshprint

예를 들어:

print -rC1 -- *(^@)

print그 칼럼을 보고 그들은 r놀랐 을까 1 C?

방주 한정자를 사용 M하면/목차마찬가지로 dir -F, 이는 디렉토리에서만 작동하지만

print -rC1 -- *(M^@)

답변3

--ignore유형에서는 작동하지 않고 패턴에서는 작동합니다. 예를 들어 파일이 있는 경우:

$ ls 
a.txt b.dat c.txt d.dat
$ ls --ignore='*.txt'
b.dat d.dat

심볼릭 링크를 필터링하는 쉬운 방법은 없지만 다음을 사용해 볼 수 있습니다.grep

ls -F | grep -v "@"

관련 정보