我目前正在学习 Linux,一些实践让我完全难住了。我试图在当前目录中查找具有特定文本的文件,并输出其索引节点号。我可以自信地单独完成所有这些事情,但当我试图将它们放在一起时,它就会崩溃;
find. -maxdepth 1 -type f | grep -r "#include" -ls -i
但由于某种原因它只输出文件名?
有任何想法吗?
答案1
find . -type f -exec grep '#include' {} \; -printf '%p %i\n'
或 grep -q 隐藏 grep 输出
find . -type f -exec grep -q '#include' {} \; -printf '%p %i\n'
答案2
grep
如果您在递归模式下使用-r
- 您实际上不需要find
命令:
grep+参数方法:
grep -rl '#include' | xargs -I {} ls -i '{}'
近似输出 ( <inode> <filename>
):
1837827 test/1.pdb
1712970 2_clean.pdb
1837846 test2/2.pdb
1712965 1_clean.pdb
答案3
由于您的搜索仅限于当前目录,如果您不关心点文件,您可以使用更简单的方法来完成此操作grep -l
,命令替换和通配符 ( *
):
ls -i $(grep -ls '#include' *)
输出:
109057734 file1.txt 109056004 file2.txt 5505834 file3.txt
或者使用旧语法,使用反引号代替$()
:
ls -i `grep -ls '#include' *`
请注意,我添加了以下-s
选项grep消除一些有关 grep 目录的警告。
如果您想要漂亮的列,请添加-1
选项LS。
ls -i1 $(grep -ls '#include' *)
输出:
109057734 file1.txt
109056004 file2.txt
5505834 file3.txt