모든 심볼릭 링크를 찾고, 어느 것이 파일이고 어느 것이 디렉토리인지 알려줍니다.

모든 심볼릭 링크를 찾고, 어느 것이 파일이고 어느 것이 디렉토리인지 알려줍니다.

나는 디렉토리 구조에서 모든 심볼릭 링크를 찾고 어느 것이 파일 링크이고 어느 것이 디렉토리 링크인지 구별할 수 있기를 원합니다.

이 명령은 어떤 링크가 디렉토리이고 어떤 링크가 파일인지 알려주는 것 외에 필요한 모든 작업을 수행합니다.

find . -type l -ls

답변1

어떤 파일을 찾고 싶은지 추측합니다일반 파일그리고 어느 것이목차.

따라서 다음과 같이 사용할 수 있습니다.

솔루션 1

find -type l -exec stat -L --printf '%n is a %F\n' {} +

명명된 파이프나 다른 유형의 파일에 대한 심볼릭 링크가 있는 경우 위 명령은 해당 링크도 인쇄합니다.

끊어진 링크 무시:

find -type l ! -xtype l -exec stat -L --printf '%n is a %F\n' {} +
#or
find -type l -not -xtype l -exec stat -L --printf '%n is a %F\n' {} +
#Or
find -type l -readable  -exec stat -L --printf '%n is a %F\n' {} +

stat -L는 링크를 따라가는 데 사용 되며, %n%F는 각각 파일 이름과 파일 형식을 가져오는 데 사용됩니다.

예를 들어 다음과 같은 구조를 사용합니다.

lrwxrwxrwx 1 edgar edgar   65 Nov 29 17:51 dirOne2Link -> /home/edgar/Documents/Gitlab/Linux_programming/testing/forums/one
lrwxrwxrwx 1 edgar edgar   65 Nov 29 17:54 fileTwo2Link -> /home/edgar/Documents/Gitlab/Linux_programming/testing/forums/two
drwxr-xr-x 2 edgar edgar 4096 Nov 29 17:50 one
-rwxr--r-- 1 edgar edgar  201 Nov 25 21:13 script
-rw-r--r-- 1 edgar edgar    0 Nov 29 17:50 two

find위의 명령을 사용하면 다음을 얻습니다.

./fileTwo2Link is a regular empty file
./dirOne2Link is a directory

솔루션 2

find다음 없이도 할 수 있습니다 -exec stat ....

find -type l  -printf "%p is a %Y\n"

위의 명령을 사용하면 다음을 얻습니다.

./pipelink is a p
./fileTwo2Link is a f
./onemorebroken is a N
./dirOne2Link is a d
./broken is a N

여기서 p는 명명된 파이프, f는 일반 파일, N은 존재하지 않는 파일(예: 끊어진 링크) 및 d는 디렉터리입니다.

관련 정보