2019年7月2日火曜日
フォルダ内全ファイル一覧、内容表示
= フォルダ内ファイル一覧、内容表示
[2019-07-01 16:48]
file_hyouzi.shでカレントデレクトリのすべてのファイルを再帰的に
そのファイル名、@@@ のある行と次の@@@のある行の間の行を表示する。
/home/moto/myprg/file_hyouzi.sh
file_hyouzi.sh
#!/bin/sh
# @@@
# フォルダ内のvimバックアップファイル以外のファイルで
# ファイルの@@@のある行から次の@@@のある行までを書き出す。
# そこにそのファイルの説明を書いておくと
# ファルダ内のファイル内容一覧するのに良い
# @@@
# -A ヒットした文字列後の行も書き出す
find . -name \*.* | xargs grep -A 10 '@@@' | file_hyouzi.pl > tmp.txt
vim tmp.txt
#tmpもfindの対象となってしまうため、削除しておく
if [ -e tmp.txt ]; then
# 実行する処理、以下は例
\rm tmp.txt
fi
#バックアップファイルも削除
if [ -e tmp.txt~ ]; then
# 実行する処理、以下は例
\rm tmp.txt~
fi
/home/moto/myprg/file_hyouzi.pl
file_hyouzi.pl
#!/usr/bin/perl
#grep -A 10 '@@@' とすると
#@@@にヒットした行は ファイル名:ヒットした行
#-A オプションでの行は ファイル名-ヒットした行
#で表示される。
$fname = "";
$flg = -1;
while ($line = <>) {
#@@@にヒットした行
if ($line =~ /^([^-:]+):(.*)/){
#print "$1\t:::::$2\n";
$flg = $flg * -1;
}
#-A 10での行
#最初の@@@で上ifが実行されて$flg=1 となり下if実行。
#なにもしないと-A 10での行まで表示されてしまうので
#次の@@@が来るとまた上ifが実行、$flg=-1 となり
#下if実行されない。
#つまり@@@と@@@ではさまれた行が表示される。
#それをvimで表示しているのでファイル名でgfすれば
#そのファイルにジャンプできる。
#C-] でもとのファイルに戻る。
if ($line =~ /^([^-:]+)-(.*)/){
#print "$1\t$2\n";
#vimのバックアップファイルは除く
if ($1 !~ /~/){
if ($flg == 1){
#print "$1\t$2\n";
#ne 文字列が等しくない。新しいファイルなら
if ($fname ne $1){
print "\n";
print "$1\n$2\n";
#ファイル名が同じならファイル名をプリントしない
} else {
print "$2\n";
}
}
}
$fname = $1;
}
}
#ダイヤモンド演算子で標準入力から一行ずつ読み
#^行頭 .改行を除く任意の一文字
#*ゼロ回以上の繰り返し
#それを$1 $2 のそれぞれ入れる。
検索キーワード
ある特定の文字列がある複数行を取得する。
再帰 デレクトリ内の全ファイルに対してコマンド実行
~
~
~
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿