2013-04-30 7 views
1

Я нахожусь в linux и загружаю много смешных картин. К сожалению, у меня осталось куча дубликатов имен, таких как download (1) и image.jpeg. Я хотел бы изменить их все на нечто более полезное.Переименуйте все файлы в папке

Есть ли способ (желательно с помощью bash) переименовать все файлы в последовательные 4-значные числа с ведущими нулями?

Например:

0001 
0002 
0003 
0004 
.... 

ответ

3

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

, пожалуйста, попробуйте код ниже. Он делает то же самое, но каждый ярлык явно написан с отладкой команд echo в цикле.

counter=1 
cd /my/image/directory 
for f in $(ls -1) 
do 
    new_filename=$(printf "%04d" ${counter})  
    echo "renaming ${f} ..to.. ${new_filename}" 
    mv ${f} ${new_filename} 
    ((counter=${counter}+1)) 
done 

Выход на экран будет немного болтливым. если у вас слишком много файлов, вы можете добавить | tee screen.out в конец строки командой done. Чтобы вы могли вернуться и посмотреть, что случилось с файлом, записанным на экране.

+0

Не используйте это! Он удалит все файлы, потому что счетчик не меняется. –

-1

До тех пор, пока вы не заботитесь, какой файл переименовывается к чему, это легко :)

counter=1 
for f in *; do 
    mv "$f" "$(printf "%04d" $((counter++)))" 
done 
+0

Итак ... есть одна имена изображения 0001 сейчас, и это все. – JShoe

1

Я создал my own tool to do this. Он также поддерживает расширения файлов, о которых я не упоминал, но, вероятно, должен быть включен. Вот код:

#!/bin/sh 

dir=$1 
cd $dir 
echo "Renaming all files in $dir." 
COUNTER=1 
for i in `ls -1` 
do 
    extension=${i##*.} 
    mv "$i" "$COUNTER.$extension" 
    echo "$i ==> $COUNTER.$extension" 
    COUNTER=$(expr $COUNTER + 1) 
done 

Это не (на момент написания) включает в себя ведущие нули, но он получает работу.

+0

, и он терпит неудачу, когда он попадает в имя файла, содержащее пробелы. Не разбирайте вывод 'ls'. –

-1

Попытка переименовать все файлы с суффиксом .bash к суффиксы .sh в папке легко сделать с

rename .bash .sh *.bash 
+0

Это не добавит серийный номер в качестве запросов. –

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