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

0 件のコメント:
コメントを投稿