- 追加された行はこの色です。
- 削除された行はこの色です。
*趣旨 [#h4a48234]
再び探さなくても良いようにメモします。
*目次 [#k5659dfd]
#contents
*日付を得る [#c80e291e]
`date '+%Y%m%d'`
*ファイルパスからファイル名や拡張子を自由に取り出す [#xee0e691]
紹介URL
http://d.hatena.ne.jp/zariganitosh/20100921/get_file_name_ext_dir
**例 [#j0778d75]
fpath='/a/b/c.d.e'
**ファイル名を取り出す(拡張子あり) [#h6a55448]
fname_ext="${fpath##*/}"
echo $fname_ext
***結果 [#va4bcdd7]
c.d.e
**ファイル名を取り出す(拡張子なし) [#o882e586]
fname="${fname_ext%.*}"
echo $fname
***結果 [#xc41fe49]
c.d
**拡張子を取り出す [#ta5f7bfa]
fext="${fpath##*.}"
echo $fext
***結果 [#o4a009df]
e
**ディレクトリを取り出す [#p70404f3]
fdir="${fpath%/*}"
echo $fdir
***結果 [#w8fd2573]
/a/b
**補足 [#dc1405b9]
-${変数#パターン} 先頭から最短一致した部分を取り除く
-${変数##パターン} 先頭から最長一致した部分を取り除く
-${変数%パターン} 末尾から最短一致した部分を取り除く
-${変数%%パターン} 末尾から最長一致した部分を取り除く
*関数 [#l856e073]
**所感 [#k233f0fa]
同じプロセス内で実行されるので、ディレクトリの移動をおこなうと関数の終了時にカレントディレクトリが変更される。
作業の環境変数自体をなんとかしたい場合にシェルスクリプトをつかうよりも有効なのだろうと思う。
なので、
-環境変数を変えたい単位で関数を用意する。
-変数に応じて汎用的に動く関数を用意する。
という作りが便利なのだろう。
**関数の書き方 [#dc3629c2]
function myfunc() {
}
関数の内部はインデントをつかることで読みやすさが格段にアップする。
*ファイル検索と連携した処理 [#zf7166f3]
ファイルの検索結果に対していろいろ処理をしたい場合、ディレクトリ構造をそのまま保存しての処理がBSD版のcpコマンドでは難しかったりするが、下記のようにwhile read 変数名; do とすることで対処できる。
find . -type f ! -path "*a.txt" ! -path "*b.txt" ! -path "*c.txt" | while read f; do
echo $f
mkdir -p $mergedir/${f%/*}
cp -a $f $mergedir/${f%/*}
done
echo "ok"
*シェルスクリプトで並列実行 [#d8499827]
**参考元 [#ce3b99d7]
http://www.bulkitem.com/2011/09/blog-post.html
**コード例 [#n79f0a8a]
#!/bin/sh
curl -O 'http://domain/1.jpg?1' & # 1M程度の画像
PID=$!
curl -O 'http://domain/2.jpg?2' & # 1M程度の画像
wait $PID
wait $!
echo "END"
**history [#r5a8253c]
コマンドの履歴を重複を削って並べる
history | awk '{ $1=""; print $0}'|sort|uniq
**文字列を一括置換 [#e5c5e1a0]
http://rakkyoo.net/?p=657
find . -name "*.csv" | xargs grep -l test | ruby -i -ep 'gsub!(/test/,"tttt")'
**シェルスクリプトでPATHの追加と削除 [#cf93478f]
http://d.hatena.ne.jp/Hoshi-KN/20120129/1327834914
#!/bin/sh
path_tool1=/opt/tool1
#PATHに上記のpath_tool1で指定したパスがあれば削除
if [ `echo $PATH | grep -e $path_tool1` ] ; then
PATH=`echo $PATH | sed -e "s@$path_tool1:\{0,1\}@@"`
export PATH
fi
unset path_tool1
path_tool2=/opt/tool2
#PATHに上記のpath_tool2で指定したパスがなければ追加
if [ ! `echo $PATH | grep -e $path_tool2` ] ; then
PATH=$path_tool2:$PATH
export PATH
fi
unset path_tool2
*日付フォーマット付きで設定 [#qec1ddb7]
DATE=`date +'%Y%m%d-%H%M'`