https://github.com/iharkatkavets/terminal-snippets
Useful snippets
https://github.com/iharkatkavets/terminal-snippets
bash ipa shortcuts snippets-collection xcode
Last synced: 3 months ago
JSON representation
Useful snippets
- Host: GitHub
- URL: https://github.com/iharkatkavets/terminal-snippets
- Owner: iharkatkavets
- License: mit
- Created: 2016-12-24T09:38:38.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2025-04-03T19:14:34.000Z (6 months ago)
- Last Synced: 2025-04-10T05:46:52.970Z (6 months ago)
- Topics: bash, ipa, shortcuts, snippets-collection, xcode
- Language: Shell
- Homepage:
- Size: 1.01 MB
- Stars: 14
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 💻 Terminal Snippets
Variables
Strip the directory path from a shell variable string and leave the last part of the path (the filename)
```
$ FILE=${PATHTOFILE##*/}
```
Strip the file name from a shell variable string and leave the dir part of the path
```
$ DIR=${PATHTOFILE%/*}
```### Ediff shortcuts
Ediff shortcuts expand
`a` - apply changes from buffer A
`b` - apply changes from buffer B
`d` - keep both variants (A+B)
`n` - show next changes
`p` - show previous changes
`r` - recover the original difference region in buffer C
`C-x o` - change focused buffer window
`v` - scroll bottom
`M-v` - scroll up
`q` - end ediffing---
$ base64
$ base64 -i IN_FILE_PATH -o OUT_FILE_PATH
Examples
$ base64 -i CertificateSigningRequest.certSigningRequest -o encodedbase64.txtEncode string
$ base64 -D <<< STRING
`base64 <<< LS0tLS1CRUdJTiBDRVJUSUZJ`
`$ base64 -D <<< STRING`
Decode string
`base64 -D <<< LS0tLS1CRUdJTiBDRVJUSUZJ== > file.bin`---
$ convert
Resize the image
```$ convert image.png -resize 33% resized.png ```
---
$ echo
List all files matching pattern in current directory
$ echo *.txt
$ echo .*---
$ git
Clean up submodules
```bash
$ git submodule foreach --recursive git clean -xfd
$ git submodule update -f --init --recursive --remote
```
Cherry pick diffs which are contained only in the `ANY_BRANCH`
```bash
$ git cherry -v master ANY_BRANCH > only-feature-chages.txt
$ git cherry-pick 64f0e89e718aa034704c5895f9de858afae9da97 f415a7d8c1599021761bab852109ef6389918...
$ git status
$ git cherry-pick --continue
```
Git find "string" in the history of diffs
```bash
$ git log -p -S string_for_searching
```
Git print diff between mybranch and master in the file 'myfile.cs'
```
$ git diff mybranch..master -- myfile.cs
```
Find the file in the history
```
$ git log --all --name-status -- "**/filename.*"
```
Show the file changes in the commit
```
$ git show --
```
Restore the file in the working copy
```
$ git checkout ^ --
```
Apply reverted changes from a commit
```bash
$ git show -- | git apply -3 --whitespace=fix -R
```
Add custom ssh identity file to the repository
```bash
$ git config core.sshCommand "ssh -i ~/.ssh/not_default_id_rsa -F /dev/null"
```
Log all particular file commits
```bash
$ git log --follow -- FILE_PATH
```
Revert 3 last commits in with one commit
```
$ git revert --no-commit HEAD~3..
```
Use custom key
```bash
git -c core.sshCommand="ssh -i ~/.ssh/mycustomkey" pull
```
---
$ hexdump
Generate 16 `hex` bytes
```
hexdump -vn16 -e'4/4 "%08X" 1 "\n"' /dev/urandom
```## Bash
### Files editing
Display file changes in real time
```$ tail -f FILE```
Remove new line and escape " symbols in the file
```$ cat ORIGINFILE.TXT | tr -d '\n' | sed 's/"/\\"/g' > NEWFILE.TXT```
Find a string recursively at path
```$ grep -ir SEARCHABLE_STRING PATH```
```$ grep -A NUMBER_OF_LINES_AFTER -ir SEARCHABLE_STRING PATH```
Create a file from hex string
```$ writehex 8ade18f6 00000001 00000000 51aabd81 > FILENAME.EXT```
Сount characters in string
```$ echo 'abc...1235abc..' | wc -c```### $ zip
`$ zip -er ZIP.zip file1 dir1 file2` - Zip files with password protectingzip files in directory with the same name as parent dir
```bash
$ zip -erv "$(basename `pwd`).zip" production.*
$ Enter password:
$ Verify password:
$ rsync -v "$(basename `pwd`).zip" USER_NAME@SERVER:PATH && rm -rvf "$(basename `pwd`).zip"
$ Password:
```
$ swiftc
Compilte swift file with generating dSym file
```$ swiftc -g file.swift```
Run executable using lldb debugger
```$ lldb file```
Load dSym file
```(lldb) add-dsym ```
Print backtrace
```(lldb) thread backtrace```
---$ find
Find files matched pattern `*.ipa` and extract to directory named `filename.unz`
```$ find . -name '*.ipa' -exec sh -c 'unzip -d `basename {}`.unz {}' \; ```
Find files with matched patterh `*.txt` and copy to CGL-28825 directory
`$ find ./UnitTests/ -name '*.txt' -exec sh -c 'cp {} CGL-28825/{}' \; `
Find duplicated files in the directory
`$ find . ! -empty -type f -exec md5 {} + | sort | uniq -d`
Find in current folder the folders that were modified 182 days ago and delete them
`$ find ./ -maxdepth 1 -type d -ctime +182 -exec rm -rfv {} \;`
Find in current folder PNG images and remove alpha channel. Adds white color to background. Overwrites!
`$ find . -name '*.png' -exec sh -c 'convert {} -background white -alpha remove -alpha off {}' \;`
Find all Info.plist files and add new boolean false value
`$ find ./ -name Info.plist -exec sh -c '/usr/libexec/PlistBuddy -c "Add :test bool false" {}' \;`
`$ find ./ -name Info.plist -exec sh -c '/usr/libexec/PlistBuddy -c "Add :my_key string \"\"" {}' \;`
Find example
`$ find ./ -type f -name '*.xib' -exec sed -i '' -e 's///g' {} +`
Resize *\*.png* images to size 800x600 and append to new file suffix 800x600.png
`$ find ./ -name '*.png' -exec sh -c 'convert {} -resize 800x600! {}%.*_800x600.png' \;`
Find in `Info.plist` file and print 1 line *A*fter
`$ find ./ios/ -name 'Info.plist' -exec sh -c 'grep -A 1 -ir receiver_id {}' \;`
Find unique files in directory and copy in another
```$ find ./ -type f -exec md5sum {} + | sort | awk '!c[substr($0, 1, 32)]++' | awk '{print $2}' | xargs -I _ cp _ another_dir```
Find file in the current directory which contains the multiple strings STR1,STR2,STR3
```$find ./ -type f -exec grep -l 'STR1' {} \; | xargs grep -l 'STR2' | xargs grep -l 'STR3' ```
---$ ls
list files in one line
```$ ls | tr "\n" " "
```---
$ jq
Remove new lines from json
```$ jq -c .
```
Pretty print JSON
```$ jq '.'
```---
$ sed
Find all \*.txt files in dir and execute sed without backuping
```bash
$ find ./UnitTests/ -type f -name '*.txt' -exec sed -i '' -e 's/video_url_android/dash/g' {} +
```
Extract minor number from version
```bash
$ echo '1.2.3' | sed 's/\([0-9]\).[0-9].[0-9]/\1/'
```
Extract substring `"Bench press"` from a string `"title": "Bench press"`
```bash
$ echo '"title": "Bench press"' | sed -ne 's/"title": \([a-z]+\)*//p'
```
| | | |
|---|---|---|
|`[[:space:]]*`|match the whitespace characters `` and ``| |
| | | |
| | | |
Extract version from `podspec` file
```bash
$ sed -rn "s/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/p" [FILE].podspec
```
Replace string from the stdin input
```bash
$ sed 's/\&/\&/g'
```
Replace digits A0 to "A0",
```bash
$ pbpaste| sed 's/\([0-9A-F][0-9A-F]\) /"\1",/g'
```
```
$ pbpaste| sed 's/\([0-9A-F]\{2,3\}\)[[:space:]]\{0,1\}/"\1",/g'
```
Convert md5 sum string to list of bytes in hex format
```bash
md5 -q Tests/Resources/1Mb | sed 's/\([0-9a-z][0-9a-z]\)/0x\1,/g'
```---
$ top
Run `top` in non-interactive(batch) mode
```$ top -l 1```---
$ clang
Compile single `main.m` file to executable `prog`
```$ clang -fobjc-arc main.m -o prog1```---
$ printf
Tool for formatted output
```$ printf '%-10.10s = %4.2f\n' 'Gigahertz' 1.92735```---
$ curl
Download and find and count occurances of `regex_pattern` in response (by adding new line `\\\n`)
```bash
$ curl -v --silent 'http://awesome.com' 2>&1 | sed $'s/regex_pattern/regex_pattern\\\n/g' | grep -c 'regex_pattern'
```
An example with query parameters
```bash
curl -X POST -H "Accept: application/json" -H "Authorization: Basic xxxxxxxx" -H "Content-Type: application/x-www-form-urlencoded" --data 'grant_type=clone&refresh_token=xxx-xxx&scope=client' 'https://SERVER_URL'
```---
$ grep
Extract substring from string:
```bash
$ grep -o -E '^[H](H|T|t)+-[0-9]{4}'
```
Extract `123` from `versionCode 123`
```bash
$ cat build.gradle | grep 'versionCode ' | grep -o -E '[0-9]+'
```
Extract `"1.2.3"` from `versionName "1.2.3"`
```bash
$ cat build.gradle | grep 'versionName ' | grep -o -E '\"[0-9].[0-9].[0-9]\"'
```
Extract URL from `file`
```bash
$ grep -o -E 'https://url.com/[?=;&_a-z0-9-]+' ../photos.txt
```
Exclude directories during search
```bash
$ grep --exclude-dir=Pods --exclude-dir=fastlane -ir 'https://' ./
```
Find multiple patterns
```
$ grep -e 'pattern1' -e 'pattern2' file
```---
$ nc
Establish socket connection
```bash
nc IP PORT
```---
$ telnet
Establish socket connection
```bash
telnet IP PORT
```---
$ nettop
Listen the socket connection created by process with PID
```bash
nettop -n -p PID
```---
$ venv
Create python virtual envrironment
```bash
python3 -m venv venv
```
Activate virtual environment
```bash
source env/bin/activate
```
Stop virtual environment
```bash
deactivate
```---
### $ rsync
Sync images(png, PNG, jpg, JPG) in 2 local folders
```bash
$ rsync -r --include="*.[Jj][Pp][Gg]" --include="*.[Pp][Nn][Gg]" --include="*/" --exclude="*" -av --progress FromDir1/ ToDir2/
```### Formatting
Pretty print JSON string
```bash
$ echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool
```
```bash
echo $(python3 -c "import sys,json; print(json.load(sys.stdin)['fields']['summary'])" <<< ${RESPONSE})
```
Pretty print XML string
```bash
$ echo 'lorem' | xmllint --format -
```### Emacs
`select region then M-| pbcopy RET` - copy from Emacs to OS X clipboard
`M-x hexl-find-file` - editing binary files (`delete-window`)
`M-x hexl-mode` - translate an existing buffer into hex### Git-Emacs
`m` - mark the file the cursor is on ATM
`M` - mark all files in buffer
`u/DEL` - unmark file below/above
`R` - resolve conflicts during merge
`a` - add file to repository
`r` - remove file
`i` - add file to ignore list
`c` - commit
`U` - Undo -> revert file
`l` - see log file
`g` - refresh the status buffer
`q` - quit status buffer
`?` - get help!### Emacs-Magit
Emacs-Magit
`M-x magit-process-buffer` - to show the output of recently run git commands
`M-x magit-section-cycle-diffs` - to expand all diffs
`l-l b-b` - checkout selected commit in history### Midnight Commander
`ESC+o` - open directory in another panel### Xcode. Setup template commands
Rename class prefix occurances in the folder.
``` bash
$ find ./ -type f -exec sed -i "" -e 's/CLConfirmLogout/___VARIABLE_productName:identifier___/g' {} \;
```## Xcode debugger
### Update view on debug
```objective-c
// stash a view (0x7f84c74ca870 address)
(lldb) e UIView *$cell = (UIView *)[0x7f84c74ca870 superview]
// set a new frame
(lldb) e (void)[$cell setFrame:(CGRect){0.f, 324.f, 10.f, 54.f}]
// set a new frame
(lldb) e (void)[$cell setFrame:(CGRect){0.f, 324.f, 10.f, 54.f}]
// update
(lldb) caflush frame
```### Examining Variables
Show the contents of the local variable bar formatted as hex.
```
(lldb) frame variable --format x bar
(lldb) fr v -f x bar
```### FFMPEG
Cut video of [duration]
```bash
$ ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4
```Create gif image from movie
```
$ ffmpeg -ss 30 -t 3 -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif
```
```
ffmpeg -ss 00:00:39.000 -i Screen\ Recording\ .mov -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif
```
* This example will skip the first 30 seconds (-ss 30) of the input and create a 3 second output (-t 3).
* fps filter sets the frame rate. A rate of 10 frames per second is used in the example.
* scale filter will resize the output to 320 pixels wide and automatically determine the height while preserving the aspect ratio. The lanczos scaling algorithm is used in this example.
* palettegen and paletteuse filters will generate and use a custom palette generated from your input. These filters have many options, so refer to the links for a list of all available options and values. Also see the Advanced options section below.
* split filter will allow everything to be done in one command and avoids having to create a temporary PNG file of the palette.
* Control looping with -loop output option but the values are confusing. A value of 0 is infinite looping, -1 is no looping, and 1 will loop once meaning it will play twice. So a value of 10 will cause the GIF to play 11 times.
More info http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html