Wiki

Clone wiki

comp-house.repo / mass-rename-files

Как переименовать сотни файлов из *.htm в *.html

Задача:

Есть множество файлов, например, file1.htm file2.htm file3.htm

Необходимо переименовать их в file1.html file2.html file3.html

Понятно, что если таких файлов не три а триста, подиночке их не переименуешь....

Решение:

для перименования файлов существует замечательная утилита rename.

$rename .htm .html *.htm 

Первый аргумент - что мы меняем, второй аргумент, на что меняем и последний задает файлы для обработки.

Как вариант, можно соединить мощь rename и find, чтобы найти и переименовать все файлы .html

find ./ -name "*.htm" | xargs rename ".htm" ".html"  

Чуть более сложный вариант, который позволяет не беспокоиться о пробелах в именах файлов и директорий:

find ./ -name "*.htm" -print0 | xargs -0 rename ".htm" ".html"  

А вот какие варианты решения этой задачи предлагает Unix Blog.

Вариант №1

    [root@unixguy scripts]# ls
    file1.htm file2.htm file3.htm

    [root@unixguy scripts]# for list in `ls -1t *.htm*`
    > do
    > prefix=`echo $list | awk -F"\." '{print $1}'`
    > mv $list ${prefix}.html
    > done

    [root@unixguy scripts]# ls
    file1.html file2.html file3.html

Вариант №2

     [root@unixguy scripts]# ls
    file1.html file2.html file3.html

    [root@unixguy scripts]# ls *.html | awk -F '.'
    '{print "mv "$1".html "$1".htm"}'| csh

    [root@unixguy scripts]# ls
    file1.htm file2.htm file3.htm

Updated