2013-06-18 3 views

ответ

2

Это может сделать это:

i=1 
for file in /your/folder/* 
do 
    mv $file ${i}.html 
    i=$((i+1)) #((i++)) was giving errors (see comments) 
done 

Он обрабатывает все файлы в /your/folder и переименовывает их в соответствии с номером $i, который продолжает увеличиваться.

+0

'((я ++)) # или я = $ ((я + 1)) или пусть я = я + 1 ' – devnull

+0

Таким образом, мы имеем 3-й вариант. Вы знаете, какой из них лучше? – fedorqui

+1

Трудно сказать, что является лучшим. Все выполняют арифметические операции. BTW, 'let i ++' является более читаемым IMHO. – devnull

1

Вот мой сценарий

#!/bin/sh 
# 
#  batchrename - renames files like 01.ext, 02.ext ... 
# 
# format : batchrename <list of files> 
#  or:    -r <extension> <<list of files> or <dir>> 
# -r - recoursively 
counter=0 
extrec="" 
if [ "$#" -lt "1" ]; then 
    echo -e "\n\t\tUsage:\n\tbatchrename [opt]\nopt:" 
    echo -e "-r <ext> <folder> (or file list) -- renames recoursively ALL files" 
    echo -e "\tin folder <folder> (or by file list given) with extension .<ext>" 
    echo -e "<folder> -- renames ALL files in folder given" 
    echo -e "<file list> -- renames ALL files of given filelist.\n\n" 
    exit 0 
fi 
Name="$*" 
if [ "$1" = "-r" ]; then 
    extrec="$2" 
    shift 
    shift 
    Name="$*" 
    [ "$Name" = "" ] && Name="./" 
fi 
echo -e "\n\t\t\tRENAMING" 

for file in $Name 
do 
file=`echo "$file" | sed "s/<>/ /g"` 
    if [ -d "$file" ];then 
    echo -e "\nDiving into \033[38m $file \033[39m" 
    cd "$file" 
    if [ "$extrec" != "" ]; then 
     batchrename -r $extrec `ls -1 | sed "s/\ /<>/g"` 
    else 
     batchrename `ls -1 | sed "s/\ /<>/g"` 
    fi 
    cd ../ 
    continue 
    fi 
    ext=`ext "$file"` 
    if [ "$ext" = "ion" ]; then 
    continue 
    fi 
    if [ "$extrec" = "" -o "$ext" = "$extrec" ];then 
     counter=`expr $counter + 1` 
    echo -e "Progress: $counter files\r\c" 
     mv "$file" "rnmd$counter.$ext" 
    fi 
done 
echo -e "\n\n\t\t\tENDING" 
digits=`echo $counter|awk '{print length ($0)}'` 
cnt=1 
while [ $digits -gt $cnt ] 
do 
    f=`ls -S -1|grep "rnmd[0-9]\{$cnt\}\."` 
    rename rnmd rnmd0 $f 
    cnt=`expr $cnt + 1` 
done 
if [ "$counter" -gt "0" ]; then 
    rename rnmd "" rnmd* 
fi 
echo -e "\n\t\t\tDone !!!\n" 

После переименования всех ваших файлов будут смахивает 001.file, 002.file, ... и так далее. Количество начальных нулей зависит от количества файлов. Итак, после переименования ls отобразит правильный порядок файлов!

Он использует промежуточный сценарий ext:

#!/bin/sh 
# 
#  ext - returns file suffix (case-unsensitive) 
# 
File="$*" 
if [ -d "$File" ]; then 
    echo "" 
    exit 0 
fi 
EXT=`echo $File|sed 's/.\{1,\}\.//g'` 
if [ "$EXT" = "$File" ]; then 
    EXT="" 
fi 
echo $EXT| tr '[:upper:]' '[:lower:]' 
Смежные вопросы