今週のタスクの確認

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/ -//')

Bash, how to hash value of a string? - Stack Overflow

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 $!

参考

Display Spinner while waiting for some process to finish