2016-06-20

zsh: 現在のディレクトリ中のファイル名の「特定部分A」を「特定部分B」に変えるスクリプト


zsh: 現在のディレクトリ中のファイル名の「特定部分A」を「特定部分B」に変えるスクリプト
zsh: Script to change the "specific part-A" to "specific part-B" of file-names in a current directory


概要


私は、Firefoxの外部CSS(Profile/chrome/userContent.css)をスクリプト経由で操作したくなりました。他方、細かなCSSの操作はStylishでしています。これらの為に、ファイル名を一括して変更するスクリプトが必要になりました。「old2new」がその答えで、具体例とソース・コードを以下に示します。


具体例

Figure 1: Demonstration of "old2new"




ソース・コード(old2new)



#!/bin/zsh 

# USAGE: old2new OLD NEW↩

# FUNCTION:
#   1) 変えたいファイルがあるディレクトリに移動
#   2) ファイルの「変ええたい一部」を$1(OLD)に入れる
#   3) 「その変更後の値」を$2(NEW)に入れる
#     NEWは何もなし("")でも可。
#   4) *${OLD}* --> *${NEW}*

# 2016-06-19-21:52

###############################################################################
# list current dir: % old2new ↩
if [[ ( $1 == "" ) && ( $2 == "") ]] ; then
  echo " • list of current dir"
 ls -dlG *
 exit
fi


###############################################################################
# for: % old2new OLD NEW↩

old="$1" # specific part-A
new="$2" # specific part-B


myls=( ${(f)"$(ls -d *)"} )
j=$((0))
for file in $myls ; do
 [[ -d "$file" ]] && continue
 [[ -f "$file" ]] || continue
 
 new_file=$( echo "$file" | grep "$old" | sed "s%$old%$new%" )
 [[ "$new_file" == "" ]] && continue
 j=$((j+1))
 echo -n "  • $j " 
 mv -fv "$file"  "$new_file"
done

if [[ $j -eq 0 ]]; then
 echo " •• old file: *${old}* not detected"
else
 echo " •• ---------------------------------------------------------------------- "
 ls -dlG *"${new}"*
fi


感想


時々、このようなスクリプトを作ろうかと思ったが、面倒くさいのでサボっていた。もう少し頑張れば、連番の付与もできそうだ...。


この記事の履歴

  1. 開始2016-06-20-01:16




注目の投稿

Terminalでの、なんちゃってViモドキ

近頃、ようやくKarabiner-Elementsに慣れてきたので、 Terminalで動作する「擬似Vi-Mode」を作って見たので、ご紹介します。 『概要』 「擬似Vi-Mode」の所以は、方向キー「←↓↑→」を通常の「hjkl」ではなくて「jkil」としました。これ...