我知道线并尝试修复我的发现-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
name下找到的*.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
)。