#!/bin/zsh
# rename files in dirs, xx.[mp4,avi,...] ==> [1,2...].[mp4,avi,...]
dir=$(eval pwd)
IFS_old=$IFS
IFS=$'\n'
# cmd ls default split pattern is space or tab, change it to \n
for file in $(ls $dir)
do echo $file
i=0
for subfile in `ls $file`
# for subfile in `ls $file | tr " " "\?"`
# for subfile in $(find $file -iregex '.*\.\(avi\|mp4\))
do
# c.strip().replace(' ', '_').replace('"', '').replace('(', '').replace(')', '').replace("'", '')
newName=`echo $subfile | sed -e "s/ /_/g"`
newName=`echo $newName | sed -e 's/"//g'`
newName=`echo $newName | sed -e 's/(//g'`
newName=`echo $newName | sed -e 's/)//g'`
newName=`echo $newName | sed -e "s/'//g"`
echo $file/$subfile "===>" $file/$newName
mv $file/$subfile $file/$newName
ext=$(echo "$newName" | cut -d. -f2)
echo $file/$newName "===>" $file/$i.$ext
let i=i+1
mv $file/$newName $file/$i.$ext
done
echo "Processed" $i "Videos"
done
IFS=$IFS_old
for subfile in
ls $file`
正常情况下会将空格认为是分隔符,带有空格的文件名会分成为多个列表元素,先将默认分隔符改成换行符,避免此问题
实现效果:
— NonViolence/
— Violence/
— renamer.sh./renamer.sh
…
Violence/videoplayback (2)_74.avi ===> Violence/videoplayback_2_74.avi
Violence/videoplayback_2_74.avi ===> Violence/1813.avi
Violence/鍚庡帹閲岄潰涓€瑷€涓嶅悎灏卞紑鎵擄紝鎷夋灦鍙樻墦鏋讹紝鐜板満涓€鐗囨贩涔憋紝鐩戞帶鎷嶄笅鍏ㄧ▼_urlgot_242.avi ===> Violence/1999.avi
…
Processed 2000 Videos