ディレクトリ内のすべてのファイルを名前で検索し、ファイルの内容をシェルに出力しようとしています。
現在はファイルリストのみを取得します。
find -name '.htaccess' -type f
./dir1/.htaccess
./dir23/folder/.htaccess
...
しかし、私はどうすればいいですか?出力内容ファイルごとに置き換えます。こんなことを考えてみてください。パイプファイル名にcat
- コマンド。
答え1
述語cat
内で使用される:-exec
find
find -name '.htaccess' -type f -exec cat {} +
これにより、ファイルの内容が順番に出力されます。
答え2
find
()のマニュアルページを参照してくださいman find
。
-exec utility [argument ...] ; True if the program named utility returns a zero value as its exit status. Optional arguments may be passed to the utility. The expression must be terminated by a semicolon (``;''). If you invoke find from a shell you may need to quote the semicolon if the shell would otherwise treat it as a control operator. If the string ``{}'' appears anywhere in the utility name or the arguments it is replaced by the pathname of the current file. Utility will be executed from the directory from which find was executed. Utility and arguments are not subject to the further expansion of shell patterns and constructs. -exec utility [argument ...] {} + Same as -exec, except that ``{}'' is replaced with as many pathnames as possible for each invocation of utility. This behaviour is similar to that of xargs(1).
したがって、スイッチをオンにするだけです-exec
。
find -type f -name '.htaccess' -exec cat {} +
答え3
使用したい-exec
オプションfind
。
find -name some_pattern -type f -exec cat{}+
そしてそれがすべてプレーンテキストで、1つずつ見たい場合は、次のようcat
に置き換えますless
(またはview
vimで)。
find -name some_pattern -type f -exec less {}+
レポートを編集するには、または(vim
必要に応じて)を使用します。emacs
gedit
find -name some_pattern -type f -exec vim {}+