私は現在Linuxを学んでいますが、いくつかの練習のために完全にパニックになりました。現在のディレクトリで特定のテキストを含むファイルを見つけて、そのファイルのinode番号を出力しようとしています。私はこれらすべてを個別に自信を持ってすることができますが、一つにまとめようとすると崩れます。
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
次のオプションを追加しました。grepgrep ディレクトリに関するいくつかの警告を削除します。
素晴らしい列が必要な場合は、-1
オプションを追加してくださいエルエス。
ls -i1 $(grep -ls '#include' *)
出力:
109057734 file1.txt
109056004 file2.txt
5505834 file3.txt