趣旨

再び探さなくても良いようにメモします。

目次

日付を得る

`date '+%Y%m%d'`

ファイルパスからファイル名や拡張子を自由に取り出す

紹介URL http://d.hatena.ne.jp/zariganitosh/20100921/get_file_name_ext_dir

fpath='/a/b/c.d.e'

ファイル名を取り出す(拡張子あり)

fname_ext="${fpath##*/}" echo $fname_ext

結果

c.d.e

ファイル名を取り出す(拡張子なし)

fname="${fname_ext%.*}" echo $fname

結果

c.d

拡張子を取り出す

fext="${fpath##*.}" echo $fext

結果

e

ディレクトリを取り出す

fdir="${fpath%/*}" echo $fdir

結果

/a/b

補足

関数

所感

同じプロセス内で実行されるので、ディレクトリの移動をおこなうと関数の終了時にカレントディレクトリが変更される。 作業の環境変数自体をなんとかしたい場合にシェルスクリプトをつかうよりも有効なのだろうと思う。

なので、

という作りが便利なのだろう。

関数の書き方

function myfunc() {

}

関数の内部はインデントをつかることで読みやすさが格段にアップする。

ファイル検索と連携した処理

ファイルの検索結果に対していろいろ処理をしたい場合、ディレクトリ構造をそのまま保存しての処理が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"

シェルスクリプトで並列実行

参考元

http://www.bulkitem.com/2011/09/blog-post.html

コード例

#!/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

コマンドの履歴を重複を削って並べる

history | awk '{ $1=""; print $0}'|sort|uniq

文字列を一括置換

http://rakkyoo.net/?p=657

find . -name "*.csv" | xargs grep -l test | ruby -i -ep 'gsub!(/test/,"tttt")'

シェルスクリプトでPATHの追加と削除

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

日付フォーマット付きで設定

DATE=`date +'%Y%m%d-%H%M'`

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS