从 grep 打印 inode 信息

从 grep 打印 inode 信息

我目前正在学习 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

相关内容