Skip to content

Instantly share code, notes, and snippets.

@heavymery
Last active July 6, 2017 08:03
Show Gist options
  • Save heavymery/16cf123e9b93ef0f942f to your computer and use it in GitHub Desktop.
Save heavymery/16cf123e9b93ef0f942f to your computer and use it in GitHub Desktop.
便利コマンドまとめ

ファイル名一括変換

for; do; done と mv コマンドを組み合わせてファイル名を一括で変換する事ができます。

ファイル名の先頭または後尾に文字列追加

for F in {対象ファイルのパス}; do mv $F {先頭に追加したい文字列}$F\{後尾に追加したい文字列}; done;

ファイル名の特定の文字列を置き換える

for F in {対象ファイルのパス}; do mv $F ${F/{変更したい文字列}/{変更後の文字列}}; done;

コマンドが長くなるので、以下のように関数にまとめて .~shrc に登録して置くと便利です。

frnm() {
  if [ $# -gt 1 ]; then
    for F in *; do mv $F ${F/$1/$2}; done;
    return $?
  else
    echo 'usage: frnm <pattern> <replacement>'
    return 1
  fi
}

文字列一括変換

Sed コマンド

ファイル中の文字列を一括変換するコマンドです。機能的にはテキストエディタの文字列変換と変わりませんが、複数の対象ファイルを指定する事ができますす。

sed -i '' -e 's/{変更したい文字列}/{変更後の文字列}/g' {対象ファイルのパス}

現在のディレクトリの「tx」拡張子の全ファイルからAVA_HOSTを SGI_HOSTに変換する例

sed -i '' -e 's/AVA_HOST/SGI_HOST/g' *.tx

Git Grep コマンドと一緒に使う

Git Grep と一緒に使うと特定の文字列が含まれているファイルのみ自動で検索して、同時に変換する事ができます。

git grep -l {検索したい文字列} {検索範囲} | xargs sed -i '' -e 's/{変更したい文字列または正規表現}/{変更後の文字列}/g'

検索範囲を指定しなかった場合は現在のディレクトリが検索範囲になります。

コマンドが長くなるので、以下のように関数にまとめて .~shrc に登録して置くと便利です。

gfnd() {
  if [ $# -gt 0 ]; then
    git grep "$@"
    return $?
  else
    echo 'usage: gfnd <pattern>'
    return 1
  fi
}

grpl() {
  if [ $# -gt 1 ]; then
    git grep -l $1 | xargs sed -i '' -e 's/'$1'/'$2'/g'
    return $?
  else
    echo 'usage: grpl <pattern> <replacement>'
    return 1
  fi
}
@heavymery
Copy link
Author

誤って git stash drop しちゃった場合の復旧方法

消えちゃった stash のコミットハッシュを探す。

git fsck --unreachable | grep commit | cut -d\  -f3 | xargs git log --merges --no-walk --grep=WIP

復旧したい stash のコミットハッシュ指定して ↓ こうする。

git cherry-pick -n -m1 <commit-hash>

@heavymery
Copy link
Author

ファイルのパーミッションを一括で変更する

cd <path> # 対象のファイルが入っているディレクトリーに移動
find . -type f -print0 | xargs -0 chmod 644

@heavymery
Copy link
Author

差分が多すぎて GitHub で見れない場合

CLI の difftool を使えば良い。↓ は XCode の FileMerge を使う場合。

# ~/.gitconfig
[diff]
  tool = opendiff
git difftool -d <base-branch>...<compare-branch>

@heavymery
Copy link
Author

Git 管理されてないファイルからも文字列を検索したい場合

grep <pattern> . -R

@heavymery
Copy link
Author

Simple .vimrc

set number
set tabstop=2
set autoindent
set expandtab
set shiftwidth=2
"set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
set listchars=tab:>-,trail:-
set list
highlight SpecialKey term=underline ctermfg=darkgray guifg=darkgray
syntax on

@heavymery
Copy link
Author

heavymery commented Apr 29, 2016

Download files from url (on Chrome DevTools)

var items = document.getElementsByClassName('item'); // get target elements
var itemIndex = 0;

var downLoadTimer;
var downLoad = function() {
  var item = items[itemIndex++];

  if(item && item.href) {
    var link = document.createElement("a");
    link.href = item.href; // set target url;
    link.download = item.innerText.replace(/[\n\r]/g, '') + item.href.match(/\.[^.]+$/)[0]; // set file name
    link.click();
  }

  downLoadTimer = setTimeout(downLoad, 1000); // set timer for next download
};

downLoad();

@heavymery
Copy link
Author

Undo Git Rebase

http://stackoverflow.com/questions/32490288/undo-git-rebase

$ git reflog mybranch
nnnnnnn mybranch@{0}: rebase finished: refs/heads/mybranch onto biguglysha1
ooooooo mybranch@{1}: commit: some sort of commit message
...
$ git reset --hard ooooooo  # or mybranch@{1}

@heavymery
Copy link
Author

Git コミット日時を変更する

git filter-branch -f --env-filter \
'if [ $GIT_COMMIT = <commit-hash> ]
 then
   export GIT_AUTHOR_DATE="<date-time>"
   export GIT_COMMITTER_DATE="<date-time>"
 fi'

@heavymery
Copy link
Author

Git 過去のコミット履歴のユーザー情報を変更する

git filter-branch --env-filter '
WRONG_EMAIL="[email protected]"
NEW_NAME="New Name"
NEW_EMAIL="[email protected]"

if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$NEW_NAME"
    export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$NEW_NAME"
    export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment