2012-06-08 4 views
2

У меня есть папка с 61 jpg в порядке Picture 002.jpg через Picture 062.jpg, я бы хотел удалить «Изображение» и правильно переименовать файлы с 01 по 61 в том же порядке они в настоящее время. Как я могу сделать это в сценарии bash?Bash - переименование пакетного файла

ответ

1
#!/bin/bash 

x=1 
for f in * 
do 
    if [ "$f" != "change_name.sh" ]; then 
     new_name=`printf "%02d.jpg" $x` 
     mv -v "$f" $new_name 
     x=$((x+1)) 
    fi 
done 

Использование: сохранить скрипт как change_name.sh в той же директории вашего образа и запустить.

Вы можете указать ls свой каталог перед запуском этого скрипта. Если имена файлов упорядочены правильно, это нормально. Или вы можете изменить ls в петле forls|sort.

Надеюсь, это поможет.

+2

Неправильная практика идти 'for f в $ (ls)', вы должны просто использовать 'for f in *'. – huon

+0

@dbaupp Не могли бы вы объяснить это? Для эффективности? Благодарю. –

+1

Эффективность ('*' не вызывает никаких дополнительных процессов), и правильность (использование 'ls' будет ломаться, если в именах файлов есть пробелы или символы новой строки). – huon

Смежные вопросы