====== 疑似treeコマンド作成 =====
treeコマンドのインストールできない環境でtreeコマンドを利用できる方法を説明します。\\
find、sed((「sed」は「Stream EDitor」の略で、「sed スクリプトコマンド ファイル名」で、指定したファイルをコマンドに従って処理し、標準出力へ出力します。ファイル名を省略した場合は、標準入力からのデータを処理します))コマンドを利用した下記コマンドを使います。
pwd;find . | sort | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
上記コマンドを.bashrcに追加してaliasとして使えます。
alias tree="pwd;find . | sort | sed -e 's/[^-][^\/]*\// |/g' -e 's/|\([^ ]\)/|-\1/'"
ここで、最初のsedコマンドはディレクトリ各部分を|に置き換え、ディレクトリ間の階層関係を表す構造を作ります。\\
また、2番目のsedコマンドは|の後に子ディレクトリ名がある場合、その前に-を追加して、子ディレクトリであることを示します。
====== 変更ファイル検索 ======
前回のリリース以降、更新されたファイルを検索するscriptの例です。\\
使う時は、「modified.sh '2025-01-11'」のように前回のリリース日を指定します。
#!/bin/bash
if [ $# -eq 0 -o $# -gt 1 ];then
echo "Usage: modified [date]"
exit 1
else
when=` date --d "$1" +"%s" `
fi
now=`date +"%s"`
seconds=`echo "$when - $now" | bc`
minutes=`echo "$seconds / 60 " | bc `
Dir="/appl/sampleapp/"
# check directory existence
if [ ! -d $Dir ];then
echo "non-existent directory: $Dir"
exit 1
fi
find $Dir -type f -not \( -path '/appl/sampleapp/var/excel/*' -o -path '/appl/sampleapp/var/logs/*' \) -mmin $minutes -printf "%M %d %u %g %TY-%Tm-%Td %p\n" | sort -r -k5,6
RETURN_CODE=$?
echo "epa_modified.sh exit with " $RETURN_CODE
exit $RETURN_CODE
ここで、-not \( -path 'some path' -o -path 'another path' \)部分は検索対象から除外するパスを指定しています。
======= 一括置換コマンド =======
grep、sedを用いて一括で文字列を置換するコマンドの例です。\\
現在フォルダを基準にbakファイルを検索して"jinji"文字列を含むファイルを対象に"jinjiappl"を"kanriappl"に置換するコマンドです。
grep -lr --include='*.bak' "jinji" . | xargs sed -i."orig" -e "s/jinjiappl/kanriappl/g"
ここで、\\
grep:\\
-l: matchするファイルを画面表示\\
-r: recursive検索\\
--include: grep検索対象のファイルパタン指定\\
sed:\\
-i: 後ろに指定した拡張子でbakupファイル生成\\
-e: 実行するscriptの指定\\