私は選択したディレクトリ全体にあるすべてのファイルの内容を見ることができるスクリプトを書いていますが、どうすればいいのかわかりません。
出力をls
またはにパイプしようとしても機能しないようです。cat
less
使用する必要があるコマンドライン変数はありますか?それとも必要なタスクを実行するコマンドはありますか?
覚えていない特定のファイルを見つけるたびに、そのファイルが何であるかをすばやく確認できることを願っています。
答え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
。-exec
find
それを書く:
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