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
感想
時々、このようなスクリプトを作ろうかと思ったが、面倒くさいのでサボっていた。もう少し頑張れば、連番の付与もできそうだ...。
この記事の履歴
- 開始2016-06-20-01:16