cat を使用してディレクトリ内のすべてのファイルを同時に表示します。

cat を使用してディレクトリ内のすべてのファイルを同時に表示します。

私は選択したディレクトリ全体にあるすべてのファイルの内容を見ることができるスクリプトを書いていますが、どうすればいいのかわかりません。

出力をlsまたはにパイプしようとしても機能しないようです。catless

使用する必要があるコマンドライン変数はありますか?それとも必要なタスクを実行するコマンドはありますか?

覚えていない特定のファイルを見つけるたびに、そのファイルが何であるかをすばやく確認できることを願っています。

答え1

これがまさにcat目的です。ディレクトリー内のすべてのファイルの内容を表示するには、次のようにします。

cat *

シェルはファイルの*リストに展開されます。隠しファイルも含めるには、次のようにします。

cat * .*

または

shopt -s dotglob; cat *

ただし、ファイルをすばやく識別したい場合は、特にファイルが非常に長い場合、これが最善の方法ではない可能性があります。

headこの場合、次のように使用すると役に立ちます。

head *

ディレクトリ内の各ファイルの最初の10行が表示され、ヘッダー行にファイル名が表示されます。

答え2

望むより」なぜ`ls`を解析しないのですか?「解析された出力がls良いアプローチではない理由。

スクリプトの場合:

#!/bin/sh

dir="$1"
PAGER="${PAGER:-cat}"

test -d "$dir" || exit 1

find "$dir" -type f -exec "$PAGER" {} \;

これは最初のコマンドライン引数を取得し、それを変数に割り当てますdir。この変数は、ユーザーがまだ設定していない場合は別の値にPAGER設定されます。cat

指定されたディレクトリが有効なディレクトリ名である場合は、そのfindディレクトリまたはサブディレクトリ内のすべての一般ファイル(隠し一般ファイルを含む)をページャに渡すために使用されます。

ファイル検索を特定のディレクトリの最初のレベルに限定するには、オプションの前にを挿入します-maxdepth 1-execfind

それを書く:

  • catすべてのファイルは次の場所にあります/tmp

    $ ./script /tmp
    
  • ホームディレクトリ内のすべてのファイルの最初の10行を確認してください。

    $ PAGER=head ./script "$HOME"
    
  • ~/storiesカタログのすべてのストーリーを読む:

    $ PAGER=less ./script "$HOME/stories"
    

拡大する:

#!/bin/sh

dir="$1"
suf="$2"
PAGER="${PAGER:-cat}"

test -d "$dir" || exit 1

find "$dir" -type f -name "*$suf" -exec "$PAGER" {} \;

これにより、スクリプトは追加のファイル名サフィックスを使用できます。

$ ./script /tmp .txt

関連情報