Переименование файлов с номерами в соответствующие им номера от 1 до n по порядку

Переименование файлов с номерами в соответствующие им номера от 1 до n по порядку

Итак, у меня есть несколько файлов в папке, где начальный номер представляет собой порядок файла, но это не обычные цифры от 1 до n, как здесь:

2-file.txt
4-file.txt
7-file.txt
12-file.txt

и я хочу, чтобы они были в последовательном порядке от 1 до «количества файлов», сохраняя числовой порядок, поэтому:

1-file.txt
2-file.txt
3-file.txt
4-file.txt

где 1-file.txt — это предыдущий 2-file.txt, 2-file.txt — это предыдущий 4-file.txt и т. д.

решение1

Этот скрипт должен сделать эту работу за вас. Не забудьте переключить его с DEBUG на LIVE:

#!/bin/sh

list=`ls *-file.txt | sort -n`

i=1
for f in $list
do
    #DEBUG MODE
    echo "mv $f $i-file.txt"
    #LIVE MODE
    #mv $f $i-file.txt
    i=$(($i + 1))
done

А вот версия без жестко закодированного расширения:

#!/bin/sh

if [ -z $1 ]
then
    echo "
You need to pass a prefix. For example:
 ${0##*/} -file.txt
"
    exit 1
fi

list=`ls *${1} | sort -n`

i=1
for f in $list
do
    #DEBUG MODE
    echo "mv $f ${i}${1}"
    #LIVE MODE
    #mv $f ${i}${1}
    i=$(($i + 1))
done

Связанный контент