オレオレLINUX便利コマンド
今週のタスクの確認
git log --since="date -v-7d +'%Y-%m-%d 00:00:00'" --oneline | grep -v 'Merge' | cut -c 9-
指定形式のブランチを取得し操作する
for i in `git branch -r| grep "develop_v3.1.0"`; do echo $i; done
現在のブランチにローカルブランチがマージされているか。(gmergechk)
for i in `git branch | egrep -v '\*|develop$|staging$|release$|master$'`; do echo -e "\e[33m${i}\e[m"; git log --oneline | grep $i | sed -e 's/^/ /g'; done;
SSHコンフィグのホスト名を検索(sshg)
cat ~/.ssh/config | grep "Host " | grep
ファイルの先頭のみにする
$ (rm -f hoge.txt && head > hoge.txt) < hoge.txt
対象のファイルの先頭行のみにする
$ for i in `ls *.txt`; do (rm -f $i && head > $i) < $i; done
ファイルを書き込む権限がない場合
$ for i in `ls *.txt`; do head $i | sudo tee $i; done
linux - コマンドラインで読み込んだファイルに上書きするには - スタック・オーバーフロー
各フォルダ配下にあるファイルより上位○位を表示する
$ for i in `ls -d /path/to/directory_*`; do echo $i; ls -l $i | grep -vE '^total' | sort -k 5,5gr | head -5; done
下記のようなフォルダ構成で使える
root/
├ import_a/
│ ├ test1.csv/
│ └ test2.csv/
├ import_b/
│ ├ test1.csv/
│ └ test2.csv/
├ import_c/
│ ├ test1.csv/
│ └ test2.csv/
複数のファイルから、grepしいい感じに表示
export TF="/path/to/target" TW="the word of grep" HD=15; for FILENAME in `ls -r $TF | head -$HD `; do echo -e "\e[32m${FILENAME}\e[m"; grep $TW ${FILENAME} | sed -e 's/^/\t/' ; done
filename
grep word
grep word
grep word
filename
grep word
grep word
grep word
.
.
.
ssh-agentのプロセス使用順にソートして一覧表示
$ ps aux | grep ssh-agen[t] | cut -d' ' -f1 | sort | uniq -c | sort -nr
???
1日以内に更新されたファイル一覧
$ sudo find ./ -mtime -1 | grep "/path/to/folder"
./path/to/folder/xxxx
./path/to/folder/xxxx
フォルダ内のファイルの行数を一覧化
$ for file in `ls test.*`; do wc -l $file; done
101 test.20181020
106 test.20181021
105 test.20181022
104 test.20181023
raiseのtestを失敗するまで実行する
$ while true; do echo "start `date`"; `rm -f log/test.log log/output.log && bundle exec rake test > log/output.log 2>&1`; if [ 0 -ne $? ]; then echo "end `date`"; break; fi done
start Thu Feb 21 18:13:03 JST 2019
start Thu Feb 21 18:13:27 JST 2019
start Thu Feb 21 18:13:44 JST 2019
start Thu Feb 21 18:13:59 JST 2019
start Thu Feb 21 18:14:15 JST 2019
start Thu Feb 21 18:14:30 JST 2019
start Thu Feb 21 18:14:46 JST 2019
end Thu Feb 21 18:15:01 JST 2019
log/test.log
には実行のログ、log/output.log
には標準出力が蓄積される。テストを行う度にリセットされる
各フォルダ内のファイル数を一覧化
for dir in `ls -ld /path/to/dir/* | cut -d' ' -f10`; do echo $dir; echo " `ls -A $dir | wc -l`"; done
/path/to/dir/child_dir1
15
/path/to/dir/child_dir2
20
ファイル一覧を縦並びで閲覧したい
$ ls -l | tr -s ' ' | cut -f10 -d' '
Applications
Desktop
Documents
Downloads
Library
Movies
Music
Pictures
Public
$ ll
total 16
drwx------@ 5 300807 AD\Domain Users 160B 2 12 17:12 Applications
drwx------+ 6 300807 AD\Domain Users 192B 5 22 18:13 Desktop
drwx------+ 12 300807 AD\Domain Users 384B 1 9 12:08 Documents
drwx------+ 167 300807 AD\Domain Users 5.2K 5 23 18:23 Downloads
drwx------@ 65 300807 AD\Domain Users 2.0K 3 15 16:34 Library
drwx------+ 3 300807 AD\Domain Users 96B 4 2 2018 Movies
drwx------+ 3 300807 AD\Domain Users 96B 4 2 2018 Music
drwx------+ 3 300807 AD\Domain Users 96B 4 2 2018 Pictures
drwxr-xr-x+ 4 300807 AD\Domain Users 128B 4 2 2018 Public
linux - How to output only file names (with spaces) in ls -Al? - Unix & Linux Stack Exchange
gitプロジェクトを全て最新にする
$ for i in `ls`; do cd $i && git checkout master && git pull && cd ../ ; done
$ for i in `ls`; do cd $i && git checkout master && git pull; cd ../ ; done
Already on 'master'
Your branch is up to date with 'origin/master'.
error: pathspec 'master' did not match any file(s) known to git.
Already on 'master'
Your branch is up to date with 'origin/master'.
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Total 24 (delta 12), reused 12 (delta 12), pack-reused 12
Unpacking objects: 100% (24/24), done.
From github.com:hogehoge/hoge-repository
* [new branch] development -> origin/development
.
.
.
数値付きフォルダを数値順でソート
sortコマンドについて詳しくまとめました 【Linuxコマンド集】
$ ls -d hoge.jsond.* | sort -t. -k 3 -n
hoge.jsond.1
hoge.jsond.2
hoge.jsond.3
hoge.jsond.4
hoge.jsond.5
hoge.jsond.6
hoge.jsond.7
hoge.jsond.8
hoge.jsond.9
hoge.jsond.10
hoge.jsond.11
hoge.jsond.12
.
.
.
$ ls -d hoge.jsond.* | sort -t. -k 3 -n
hoge.jsond.1 hoge.jsond.23 hoge.jsond.37 hoge.jsond.50 hoge.jsond.64
hoge.jsond.10 hoge.jsond.24 hoge.jsond.38 hoge.jsond.51 hoge.jsond.65
hoge.jsond.11 hoge.jsond.25 hoge.jsond.39 hoge.jsond.52 hoge.jsond.66
hoge.jsond.12 hoge.jsond.26 hoge.jsond.4 hoge.jsond.53 hoge.jsond.67
hoge.jsond.13 hoge.jsond.27 hoge.jsond.40 hoge.jsond.54 hoge.jsond.68
hoge.jsond.14 hoge.jsond.28 hoge.jsond.41 hoge.jsond.55 hoge.jsond.69
hoge.jsond.15 hoge.jsond.29 hoge.jsond.42 hoge.jsond.56 hoge.jsond.7
hoge.jsond.16 hoge.jsond.3 hoge.jsond.43 hoge.jsond.57 hoge.jsond.70
hoge.jsond.17 hoge.jsond.30 hoge.jsond.44 hoge.jsond.58 hoge.jsond.71
hoge.jsond.18 hoge.jsond.31 hoge.jsond.45 hoge.jsond.59 hoge.jsond.72
hoge.jsond.19 hoge.jsond.32 hoge.jsond.46 hoge.jsond.6 hoge.jsond.8
hoge.jsond.2 hoge.jsond.33 hoge.jsond.47 hoge.jsond.60 hoge.jsond.9
hoge.jsond.20 hoge.jsond.34 hoge.jsond.48 hoge.jsond.61
hoge.jsond.21 hoge.jsond.35 hoge.jsond.49 hoge.jsond.62
hoge.jsond.22 hoge.jsond.36 hoge.jsond.5 hoge.jsond.63
パスワード生成
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -1
P7xe5xHgdamKEWuV
ファイルの特定の範囲の行を抽出
sed -n '2,4p' < file.txt
$ printf "1\n2\n3\n4\n5\n6\n7" | sed -n '2,4p'
2
3
4
shell - Bash tool to get nth line from a file - Stack Overflow
現在のブランチで修正したspecのみテストを実行したい
echo $(git diff origin/master `git branch | grep '*' | cut -d' ' -f2` | grep 'diff --git' | sed -E 's#diff --git a\/(.+) b\/.+#\1#' | grep spec) | { read FILES; bundle exec rspec $FILES; }
フロー
- ブランチをmasterと比較
- 差分よりspecファイルだけ取得
- rspecを対象ファイル指定して実行
ハッシュ値を取得したい
$ echo $(sha1sum <<<`date +"%s%6N"`|sed 's/ -//')
linux - Command to get time in milliseconds - Stack Overflow
rspecを何回も実行する
read HASH <<<$(echo $(sha1sum <<<`date +"%s%6N"`|sed 's/ -//')); HASHFILE=/tmp/$HASH; for i in `seq 10`; do bundle exec rspec >> $HASHFILE 2>&1; if [[ $? != 0 ]]; then echo "$i: ○"; else echo "$i: ×"; fi; done; echo "read results $HASHFILE"
ローディング状態を再現
function spinner() {
PID=$1
i=1
sp="/-\|"
echo -n ' '
while ps a | awk '{print $1}' | grep -q "${PID}";
do
printf "\b${sp:i++%${#sp}:1}"
sleep 1
done
echo -n ' '
}
Usage
sleep 5 &
spinner $!