再び探さなくても良いようにメモします。
`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 | awk '{ $1=""; print $0}'|sort|uniq
find . -name "*.csv" | xargs grep -l test | ruby -i -ep 'gsub!(/test/,"tttt")'
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'`
function foo() {
local arrayname=$1
eval ref=\"\${$arrayname[@]}\"
local list=( ${ref} )
for i in "${list}"; do
echo "${i}"
done
}
hoge=( 'xxx' 'yyy' 'zzz' )
foo hoge
小粋空間
http://www.koikikukan.com/archives/2013/09/13-025555.php
#!/bin/sh
TARGET=$1
if [ "$TARGET" == "" ]; then
echo "パラメータを指定してください。";
elif [ -f $TARGET -o -d $TARGET ]; then
TIMESTAMP=`ls -d -l --time-style='+%Y%m%d' $TARGET | awk '{print $6; }'`;
TARGET_PATH=`dirname $TARGET`
TARGET_BODY=`basename $TARGET`
if [ "$TARGET_PATH" != "" ]; then
TARGET=$TARGET_PATH/$TARGET_BODY
else
TARGET=$TARGET_BODY
fi
echo "mv $TARGET $TARGET.$TIMESTAMP"
#mv $TARGET $TARGET.$TIMESTAMP
else
echo "指定されたファイルまたはディレクトリは存在しません。";
fi
http://typista.it-creates.com/dos/304.html
いままで、学んできたことを組み合わせて、シェルの関数を作りました。
function logmove(){
DATE=`date +'%Y%m%d'`
\ls -1 *.log | while read TARGET;do
FILEDATE=`ls -d -l --time-style='+%Y%m%d' $TARGET | awk '{print $6; }'`;
FILEDAY=`ls -d -l --time-style='+%d' $TARGET | awk '{print $6; }'`;
FILEMONTH=`ls -d -l --time-style='+%m' $TARGET | awk '{print $6; }'`;
FILEYEAR=`ls -d -l --time-style='+%Y' $TARGET | awk '{print $6; }'`;
if test $FILEDATE != $DATE ; then
mkdir -p ./$FILEYEAR/$FILEMONTH/$FILEDAY
echo mv ./$TARGET ./$FILEYEAR/$FILEMONTH/$FILEDAY/
fi
#echo $FILEDATE
done
}