Linux에서 "find" 명령을 사용하여 찾은 파일의 절대 경로를 얻는 방법은 무엇입니까?

Linux에서 "find" 명령을 사용하여 찾은 파일의 절대 경로를 얻는 방법은 무엇입니까?

파일이 존재하는지 확인하는 중입니다. find명령은 다음과 같습니다.

find ${pwd} | grep 'Test.*zip'

이 명령은 상대 경로와 함께 출력을 반환합니다. 예:

./ReleaseKit/Installable/Test-5.2.0.11.zip

find명령을 사용하여 찾은 파일의 절대 경로를 얻는 방법이 있습니까 ?

답변1

너의 문제

    find ${pwd} | grep 'Test.*zip'

이라는 변수가 없다는 것입니다 pwd. 그래서 이것은 와 같습니다 find | grep 'Test.*zip'. 현재 디렉터리를 시작점으로 사용하려고 합니다.

프로그램을 실행하려면 또는 $(pwd)대신 $PWD에 다른 POSIX 쉘에서 유지 관리하는 변수를 사용하여 현재 디렉토리를 제공하십시오 ${pwd}. 모든 쉘이 POSIX인 것은 아닙니다. 또한 디렉터리 경로에 이상한 문자가 나타나지 않도록 변수나 명령 대체를 인용해야 합니다.$(pwd)pwd$PWDbash

    find "$PWD" | grep 'Test.*zip'

답변2

예, 하지만 문장에 더 많은 매개변수(경로 + 파일 + 작업)가 필요할 수 있습니다. 아마도 다음과 같이 명령을 구성하는 경우일 것입니다.

$> find {path} -iname {file} -exec {action} \;

사용링크 읽기절대 경로를 가져오는 명령(Linux 및 OS/X)

전임자.

$> find ./www/project/ -iname 'Test*.zip' -exec readlink -f {} \;
/opt/www/project/Test-5.2.0.11.zip
/opt/www/project/Test-5.2.0.13.zip

답변3

보고된 경로 이름은 find항상 해당 경로가 발견된 최상위 검색 경로로 시작됩니다. 따라서 절대 경로를 검색 경로로 사용하십시오.

find "$PWD" -name 'Test*zip'

PWD변수는 현재 디렉토리의 절대 경로 이름을 보유합니다.

검색 경로가 지정되지 않으면 GNU는 find기본적으로 현재 디렉터리 .("점")를 검색 경로로 사용합니다. 이는 이라는 변수가 없기 때문에 귀하의 경우에 발생합니다 pwd. 이는 find검사된 모든 경로 이름이 점으로 시작함을 의미합니다. 대부분의 다른 구현에서는 검색 경로가 제공되지 않으면 오류가 발생합니다.

$ unset pwd
$ find $pwd
usage: find [-dHhLXx] [-f path] path ... [expression]

관련 정보