나는 디렉토리 구조에서 모든 심볼릭 링크를 찾고 어느 것이 파일 링크이고 어느 것이 디렉토리 링크인지 구별할 수 있기를 원합니다.
이 명령은 어떤 링크가 디렉토리이고 어떤 링크가 파일인지 알려주는 것 외에 필요한 모든 작업을 수행합니다.
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
는 디렉터리입니다.