나는 다음과 같이 updateb를 실행합니다.updatedb --localpaths="/a /b"
/a
이동식 드라이브입니다. /b
로컬 하드 드라이브입니다. 항상 액세스할 수 있는 것은 아니지만 특정 파일이 거기에 있는지 찾기 위해 /a
실행하고 싶을 때가 많습니다 (마지막으로 실행한 시간을 기준으로 ).locate
updatedb
문제는 updatedb
연결하지 않은 상태에서 실행하면 오류가 발생한다는 것입니다.
/usr/bin/find: '/a': No such file or directory
데이터베이스는 이에 대한 최신 정보를 가져오지만 기존 데이터를 /b
삭제합니다 . /a
연결하지 않았을 때 /a
데이터를 유지하는 방법이 있습니까?/a
updatedb
나는 이것이 여러 데이터베이스에서 가능할 것이라고 생각합니다. 하나는 for /a
이고 하나는 for입니다 /b
. 그런 다음 스크립트는 /a
삽입할지 여부를 결정할 때 삽입되었는지 확인할 수 있습니다 updatedb
.
그러나 두 명령에 대한 매뉴얼 페이지에서는 내가 아는 것보다 더 많은 것을 알고 있다고 가정하므로(예: FINDOPTIONS
수행할 작업) 이 문제에 대한 더 간단한 해결책이 있기를 바랍니다.
답변1
나는 Windows에서의 Linux나 GNU 버전을 모르지만 locate
원하는 것을 할 수 있을 것입니다. 더 긴 버전의 설명서가 있습니다.여기.
단일 updatedb --localpaths="/a /b"
명령을 2개의 명령으로 바꾸세요.
updatedb --localpaths="/b"
if [ -d "/a" ]; then updatedb --localpaths="/a" --output=/dir/mydb; fi
/dir/mydb
데이터베이스가 저장될 파일의 전체 경로 이름은 어디에 있습니까?
대상으로 지정할 때 환경 변수를 LOCATE_PATH
로 설정하십시오 /dir/mydb::
. 원칙적으로 ::
이는 표준 데이터베이스를 사용하는 것을 의미해야 합니다.
그래도 ::
작동하지 않으면 를 실행하여 표준 데이터베이스의 파일 이름을 얻을 수 있습니다 updatedb --help
. 예를 들어 기본값이 이라고 표시되면 /usr/local/var/locatedb
이를 설정할 수 있습니다 LOCATE_PATH=/dir/mydb:/usr/local/var/locatedb
. 이 -d
옵션을 사용하여 locate
이 데이터베이스 목록을 제공 할 수도 있습니다 .