원래 발견은 OS X에서 작동했지만 이제 Ubuntu 16.04에서는 작동하지 않습니다.
find $HOME -type f -name "*.tex" -exec grep -l "masi" {} + | vim -R -
(여전히 단순화된 버전입니다. vim
부분을 생략할 수 있지만 여기서는 결과를 처리 중이라는 것만 표시됩니다.)
Ubuntu 16.04에서는 이러한 권한 거부 메시지가 표시됩니다. 실제로 이러한 파일은 대부분 .dotFiles인 것 같습니다.
drwx------ 2 root root 4096 touko 29 23:59 .gvfs
난 합칠 수 없어암호내가 검색한 내용을 찾았습니다. 따라서 모든 파일이 검색되지만 권한이 거부된 파일( ! -readable -prune
)은 제외됩니다. 의사코드
find $HOME -type f -name "*.tex" \
-o ! -readable -prune -o \
-exec grep -l "masi" {} +
하지만 목록과 같은 메시지를 많이 제공하면 너무 많이 확장되는 것 같습니다.
grep: /home/masi/.conda/envs/my_root/src/linux-headers-4.2.0-27/include/linux/power: Is a directory`
...
OS X와는 매우 다릅니다. 대신 성공하지 않고 구조를 구문 분석하려고 시도했지만 -perm a+r
여전히 권한 거부 메시지가 표시됩니다.
Giles의 답변을 되돌아 보면
내 최종 해결책은
find $HOME +perm 0666 -type f -name ...
readable
POSIX가 아니며 OSX에서 작동하지 않기 때문입니다 .
찾기에서 검색과 제외를 결합하는 방법은 무엇입니까?
답변1
귀하의 질문에 대한 대답은 부울 대수 및 연산자 우선 순위와 관련이 있습니다. 귀하의 find
명령은 다음과 같습니다 :
- 일반 파일이고 이름이 일치하면
*.tex
아무 작업도 수행되지 않습니다. - 그렇지 않고 읽을 수 없으면 반복하지 않고 건너뜁니다.
- 그렇지 않으면 실행하십시오
grep
.
가독성 테스트부터 시작하세요. 이렇게 하면 관심 있는 파일과 일치하는 테스트가 실행하려는 명령에 추가됩니다.
find ~ ! -readable -prune -o \
-type f -name "*.tex" -exec grep -l "masi" {} +
또는 Linux 및 OSX를 사용하는 것으로 나타나므로 GNU grep의 재귀 도구를 사용할 수 있습니다.
grep -s -r --include='*.tex' -l 'masi' ~
홈 디렉터리에 읽을 수 없는 파일이 없어야 합니다. 루트에 속하는 파일이 있다는 것은 일부 프로그램을 루트로 실행했으며(아마도 를 통해 sudo
) 자동 생성된 상태 파일이나 임시 파일이 남아 있다는 것을 의미합니다.
~/.gvfs
응 루트중력 가속도 센서마운트 지점 계층 구조는 루트가 아닌 사용자에게 속해야 합니다. 그렇지 않으면 수행하려는 GVFS 설치(이동식 미디어, 네트워크 드라이브 등)가 작동하지 않습니다. 달리기 sudo rmdir ~/.gvfs
. 아직 사용 중이어서 삭제할 수 없다면, 다른 곳으로 옮기고( sudo mv ~/.gvfs
~/.gvfs.root`) 현재 설치되어 있는 항목이 제거되면 삭제하세요.