내 목표는 심볼릭 링크에서 심볼릭 링크를 마우스 오른쪽 버튼으로 클릭하고 nemo
링크를 상대 경로로 강제로 다시 작성하는 사용자 정의 스크립트를 트리거하는 것입니다(절대 경로가 있는 경우).
문제는 절대 경로가 있는 심볼릭 링크를 생성하기 위해 에 DRAG+SHIFT+CTRL
하드코딩되어 있다는 것입니다. nemo
이로 인해 파일 시스템에 원격으로 액세스하려고 하면 문제가 발생합니다.
내 문제는 제스처를 유지하고 싶고 소스에서 빌드 DRAG+SHIFT+CTRL
하고 싶지 않으며 nemo
관련되지 않은 연결된 디렉터리를 원격으로 탐색할 수 있기를 원한다는 것입니다.
제가 생각해낸 해결책은 그 안에 새로운 상황에 맞는 메뉴 옵션을 만드는 것이었습니다. nemo
이를 통해 스크립트를 트리거하여 이러한 링크를 "수정"할 수 있습니다.
새로 생성하여 상황에 맞는 메뉴 옵션을 성공적으로 생성했습니다. 다음을 .nemo_action
사용하여 새 파일을 생성했습니다.GitHub의 템플릿.
이러한 유형의 파일에는 두 개의 디렉터리가 있습니다.
/usr/share/nemo/actions/
시스템 전반에 걸친 작업$HOME/.local/share/nemo/actions/
사용자 작업을 위해
내 fix-link.nemo_action
파일은 다음과 같습니다.
[Nemo Action]
Active=true
Name=Force Relative Link
Comment=If the file is a link to an absolute path, it will be forced to become relative.
Exec=<fix-link.sh %F>
Selection=any
Extensions=nodirs;
EscapeSpaces=true
내 fix-link.sh
파일(동일한 디렉터리에 있음)은 다음과 같습니다.
#!/bin/bash
$(ln "-rs" $(readlink -f "$1") "$1.tmp")
mv -f "$1.tmp" $(readlink -f "$1")
exit 0
임시 파일은 잘 생성되었지만 덮어쓰기가 거부됩니다 . 이는 원래 절대 경로 링크를 생성할 때 설정한 권한과 관련이 있는 $(readlink -f "$1")
것 같습니다 .nemo
DRAG+SHIFT+CTRLl
편집하다
@Gilles는 내 스크립트에서 많은 버그를 수정했습니다. 이 시점에서 나는 파일 Extensions=nodirs;
의 줄을 fix-link.nemo_action
읽도록 변경해야 한다는 것을 발견했습니다 Extensions=any;
. 그렇지 않으면 상황에 맞는 메뉴를 통해 이 스크립트를 활성화하거나 링크할 수도 없습니다. 디렉토리, 이것이 모든 용도로 수행되는 작업입니다.
그래서 지금
fix-link.nemo_action
다음과 같이:
[Nemo Action]
Active=true
Name=Force Relative Link
Comment=If the file is a link to an absolute path, it will be forced to become relative.
Exec=<fix-link.sh %F>
Selection=any
Extensions=any;
EscapeSpaces=true
내 fix-link.sh
파일은 다음과 같습니다.
#!/bin/bash
ln -rs -- "$(readlink -f -- "$1")" "$1.tmp"
mv -f -- "$1.tmp" "$1"
모든 것이 세상과 잘 어울립니다. 다들 감사 해요.
답변1
스크립트에 몇 가지 문제가 있습니다.
- 큰따옴표가 누락되었습니다.에 대한
$(readlink …)
. 링크 대상에 공백이나 와일드카드가 포함되어 있으면 중단됩니다. - 명령 대체를 사용
ln
하고 결과를 실행할 명령으로 사용하고 있습니다. 다행히도ln
출력이 생성되지 않으므로 아무런 해가 되지 않습니다. - 귀하의
mv
명령은 심볼릭 링크를 대상 위치로 이동하는데 이는 의미가 없습니다.
나는 이것이 당신이 쓰고 싶은 것이라고 생각합니다 :
#!/bin/sh
ln -rs -- "$(readlink -f -- "$1")" "$1.tmp"
mv -f -- "$1.tmp" "$1"
또는 다음을 사용할 수 있습니다.symlinks
많은 Linux 배포판에 존재하는 유틸리티(원래 Mark Lords가 관리하고 현재는 J. Brandt Buckley가 관리함). 이 명령은 symlinks -c /path/to/directory
지정된 디렉터리의 모든 기호 링크를 상대 링크로 변환합니다.