파일이 존재하는지 확인하는 중입니다. 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
$PWD
bash
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]