알아요철사발견한 내용을 수정하려고 했으나 -mindepth 15
실패했습니다.
find -L $HOME -type f -name "*.tex" \
-exec fgrep -l "janne" /dev/null {} + | vim -R -
실패한 시도
find -L $HOME -type f -mindepth 15 -name "*.tex" \
-exec fgrep -l "janne" /dev/null {} + | vim -R -
find -L
그것에 대해여기
그 튼튼한
Vim: Reading from stdin...
find: ‘/home/masi/LOREM’: Too many levels of symbolic links
심볼릭 링크 시각화가 성공하지 못했습니다. 시스템의 심볼릭 링크 디렉터리와 파일만 보고 싶은데 모든 파일이 제공됩니다.
tree -l
Law29의 제안
# include symlinks
find "$1" -type l -name "$2*" -print0 \
| xargs -0 grep -Hr --include "*.tex" "$2" /dev/null {} + | vim -R -
출력이 실패했지만 비워둘 수는 없습니다.
Vim: Reading from stdin...
grep: {}: No such file or directory
grep: +: No such file or directory
시스템 특징
masi@masi:~$ ls -ld -- "$HOME" /home/masi/LOREM
drwxr-xr-x 52 masi masi 4096 Aug 16 16:09 /home/masi
lrwxrwxrwx 1 masi masi 17 Jun 20 00:27 /home/masi/LOREM -> /home/masi/LOREM/
masi@masi:~$ type find
find is /usr/bin/find
masi@masi:~$ find --version
find (GNU findutils) 4.7.0-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2)
시스템: Linux Ubuntu 16.04 64비트
스레드 스크립트의 경우:여기
찾기: 4.7.0
Grep: 2.25
적용 find
:haetex
여기
답변1
다음 문자열로 끝나고 다음 문자열을 포함 하는 모든 파일 $HOME
(심볼릭 링크를 통해 참조된 파일 포함) 을 표시하려는 경우 :.tex
janne
find -L "$HOME" -type f -name '*.tex' -exec grep -l 'janne' {} + 2>/dev/null | vim -R -
$HOME
문자열이 포함된 파일에 해당하는 이름 아래에 있는 *.tex
심볼릭 링크 만 표시하려는 경우 janne
:
find -L "$HOME" -xtype l -name '*.tex' -exec grep -l 'janne' {} + 2>/dev/null | vim -R -
"심볼링크 수준이 너무 많습니다"라는 오류 메시지를 피하는 유일한 방법은 생성자에서 수행한 모든 오류를 삭제하는 것입니다 2>/dev/null
.
두 경우 모두 find
동사는 이미 탐색한 파일과 디렉터리를 탐색하지 않습니다. 방문한 위치를 기억하고 파일 시스템 트리의 해당 부분을 자동으로 정리합니다. 예를 들어,
mkdir a a/b a/b/c
cd a/b/c
ln -s ../../../a
# Here you can ls a/b/c/a/b/c/a/b/...
# But find will not continue for very long
find -L a
a
a/b
a/b/c
find: File system loop detected; ‘a/b/c/a’ is part of the same file system loop as ‘a’.
답변2
문제는 재귀적인 심볼릭 링크가 있다는 것입니다. 나는 두 가지 옵션을 고려할 것입니다:
잊어버리세요
-L
. 트리의 아무 곳에서나 .tex라는 이름의 모든 파일을 가져온 다음 필터링합니다("Math"로 시작하는 심볼릭 링크가 가리키는 디렉터리에 있는 것 외에 다른 기준은 없습니다).두 단계로 수행합니다. 둘 중 하나도 수행하지 않습니다
-L
. 먼저 "Math*"라는 이름의 모든 심볼릭 링크(및 아마도 디렉토리?)를 검색합니다. 해당 목록을 가져와 다음과 같이 거기에서 재귀적으로 tex 파일을 검색합니다.find . -type l -name "Math*" -print0 \ | xargs -0 grep -Hr --include "*.tex" "janne"
답변3
사용하는 이유가 심볼릭 링크이기 -L
때문에 여전히 들어가고 $HOME
싶은 경우(그러나 디렉토리의 다른 심볼릭 링크에는 들어가지 않아 문제가 발생할 수 있음) 다음을 사용하십시오.find
find "$HOME/" -name '*.tex' -type f -exec fgrep -l janne {} +
( /dev/null
불필요 -l
).
또는:
find -H "$HOME" -name '*.tex' -type f -exec fgrep -l janne {} +
안이 보인다정기적인일반적으로 파일만 보고 fifo, 장치 또는 디렉터리 내부는 보고 싶지 않습니다. 일반 파일에 대한 심볼릭 링크를 동시에 보려면(그러나 동일한 파일을 여러 번 볼 수 있음) 다음으로 변경할 수 있습니다 -type f
( -xtype f
GNU 가정 find
).