find
은 옵션의 시작으로 파일 이름의 시작 부분에 대시를 해석합니다. 친숙한 --
트릭을 사용하면 옵션이 파일 이름 뒤에 나오므로 따옴표로 아무 효과가 없으므로 첫 번째 대시를 \-
으로 바꾸어도 작동하지 않습니다. 사용자는 종종 이러한 파일 이름 앞에 ./
을 붙이는 것이 좋습니다.하지만 주어진 경로가 절대 경로인지 상대 경로인지 여부를 모르는 경우 어떻게해야합니까?디렉토리에서 대시로 시작하는 파일 찾기
편집 : 하나의 해결책은 find "$(readlink -f -- "$test_filename")"
인데,보기 흉한 것입니다. 더 좋은 아이디어?
편집 2 : 제안 해 주셔서 감사합니다. 이 노력으로 생긴 두 개의 스크립트는 다음과 같습니다. safe-find.sh; safe-count-files.sh
OP의 편집 전에 내 대답은 실제로 첫 번째 oneliner보다 덜 난해하기 때문에 readlink가 포함되어 있습니다. 두 가지 프로세스 (fork 된 셸과 readlink 자체)를 두 번 실행하고 찾기 위해 인수로 여러 디렉토리가 있으면 모든 객체에 readlink를 적용하는 것이 한 가지 단점입니다 – thkala
@thkala : 방금 알아 냈습니다. $ (exec readlink -f - "$ file")'는 포크 중 하나를 방지합니다. 가독성의 비용. –
@larsmans : thkala의 대답은'readlink -f'가없는 시스템에서 작업 할 때 이점이 있습니다 (GNU, NetBSD 및 OpenBSD만이 가지고 있음). – Gilles