forked from kenorb/dotfiles
-
Notifications
You must be signed in to change notification settings - Fork 0
/
.bash_functions
201 lines (172 loc) · 5.14 KB
/
.bash_functions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# ~/.bash_functions
# Define Bash functions.
# Invoked by .bashrc file.
# FUNCTIONS
# Realpath to provide absolute path with OSX
# See: http://stackoverflow.com/questions/3572030/bash-script-absolute-path-with-osx
realpath () {
[[ "$1" = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}
# Change dir recursively via find.
# Note: It's basically the same as: cd **/dir when globstar is enabled.
# Usage: cdf (dir)
cdf() {
pushd "$(find . -name "$1")"
}
# Find files/dirs by name recursively.
# Usage: ff (file)
f() {
find . -name "*$1*"
}
# Find file by exact name recursively.
# Usage: ff (file)
ff() {
find . -name "$1"
}
# Find recursively and edit the file in Vim.
# Note: It's basically the same as: vim **/file when globstar is enabled.
# Usage: ff (file)
vimf() {
vim "$(find . -name "*$1*")"
}
# Allows you to search for any text in any file recursively.
# Usage: ft "my string" *.php
ft() {
find . -name "$2" -exec grep -il "$1" {} \;
}
# Find duplicate files.
# Usage: dups (dir)
dups() {
fdupes -v && fdupes -rS1 "$1" | sed '$!N;s/\n/ /' | sort -n
}
# Search for command in history.
# Usage: hs (string)
hs() {
history | grep "$1"
}
# Trace mysqld for queries
# Usage: dmysql
dmysql() {
sudo dtruss -t read -fn mysqld 2>&1 | grep -Eo '[A-Z]{4}[^"]+'
}
# Trace apache
# Usage: dapache
dapache() {
sudo dtruss -fn httpd
}
# Trace apache files
# Usage: dapache-files
dapache-files() {
sudo dtruss -t open -fn httpd 2>&1 | grep -o '".*"' | grep -o '[^"].*\\'
}
# Strip trailing whitespaces.
# Usage: trim *.*
# See: http://stackoverflow.com/q/149057/55075
#trim() {
# ex +'bufdo!%s/\s\+$//e' -cxa $*
#}
# Convert tabs to spaces.
# Usage: retab *.*
# See: http://stackoverflow.com/q/11094383/55075
#retab() {
# ex +'set ts=2' +'bufdo retab' -cxa $*
#}
# Archive the page in Wayback Machine.
# Usage: archive http://example.com/
archive() {
for url in $*; do curl -vs http://web.archive.org/save/$url | tail; done
}
# Extract most know archives
# Usage: extract (file)
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar e $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
# Uncompress zlib data (e.g. git objects)
# Usage: deflate (file)
deflate() {
printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" | cat -- - $1 | gunzip
}
# Convert svn branches and tags into git.
# Usage: svn2git
# See: http://stackoverflow.com/q/2244252/55075
svn2git() {
git svn fetch --all # Fetch all remote branches that have not been fetched yet.
git for-each-ref --format="%(refname:short) %(objectname)" refs/remotes/tags \
| while read BRANCH REF
do
TAG_NAME=${BRANCH#*/}
BODY="$(git log -1 --format=format:%B $REF)"
echo "ref=$REF parent=$(git rev-parse $REF^) tagname=$TAG_NAME body=$BODY" >&2
git tag -a -m "$BODY" $TAG_NAME $REF^ && \ # Create git tag from tag branch.
git branch -r -d $BRANCH # Delete tag branch.
done
}
# Convert video to gif file.
# Usage: video2gif video_file (scale) (fps)
video2gif() {
ffmpeg -y -i "${1}" -vf fps=${3:-10},scale=${2:-320}:-1:flags=lanczos,palettegen "${1}.png"
ffmpeg -i "${1}" -i "${1}.png" -filter_complex "fps=${3:-10},scale=${2:-320}:-1:flags=lanczos[x];[x][1:v]paletteuse" "${1}".gif
rm "${1}.png"
}
# Create user in MySQL/MariaDB.
mysql-create-user() {
[ -z "$2" ] && { echo "Usage: mysql-create-user (user) (password)" >&2; return; }
mysql -ve "CREATE USER '$1'@'localhost' IDENTIFIED BY '$2'"
}
# Delete user from MySQL/MariaDB
mysql-drop-user() {
[ -z "$1" ] && { echo "Usage: mysql-drop-user (user)" >&2; return; }
mysql -ve "DROP USER '$1'@'localhost';"
}
# Create new database in MySQL/MariaDB.
mysql-create-db() {
[ -z "$1" ] && { echo "Usage: mysql-create-db (db_name)" >&2; return; }
mysql -ve "CREATE DATABASE IF NOT EXISTS $1"
}
# Drop database in MySQL/MariaDB.
mysql-drop-db() {
[ -z "$1" ] && { echo "Usage: mysql-drop-db (db_name)" >&2; return; }
mysql -ve "DROP DATABASE IF EXISTS $1"
}
# Grant all permissions for user for given database.
mysql-grant-db() {
[ -z "$2" ] && { echo "Usage: mysql-grand-db (user) (database)" >&2; return; }
mysql -ve "GRANT ALL ON $2.* TO '$1'@'localhost'"
mysql -ve "FLUSH PRIVILEGES"
}
# Show current user permissions.
mysql-show-grants() {
[ -z "$1" ] && { echo "Usage: mysql-show-grants (user)" >&2; return; }
mysql -ve "SHOW GRANTS FOR '$1'@'localhost'"
}
# Show all variables.
mysql-show-variables() {
mysql -sve "SHOW VARIABLES LIKE '%$1%'"
}
# Show error log.
mysql-show-errorlog() {
sudo tail -f $(mysql -Nse "SELECT @@log_error")
}
# Compare two binary files.
# Usage: diffhex file1 file2
# See: http://superuser.com/a/968863/87805
diffhex() {
diff -y -W200 <(xxd -l1000 "$1") <(xxd -l1000 "$2") | colordiff
}