2014-02-04 2 views
1

У меня есть куча файлов без рисунка в их имени вообще в каталоге. все, что я знаю, это все файлы Jpg. Как их переименовать, чтобы у них была какая-то последовательность в их имени.Как переименовать несколько файлов в терминале (LINUX)?

Я знаю, что в Windows все, что вы делаете, - это выбрать все файлы и переименовать их в одно и то же имя, а ОС Windows автоматически добавляет порядковые номера, чтобы компенсировать одно и то же имя файла.

Я хочу иметь возможность сделать это в Linux Fedora, но я могу сделать это только в терминале. Пожалуйста помоги. Я потерян.

Что такое команда для этого?

ответ

6

Самый лучший способ сделать это, чтобы запустить цикл в терминале, идущий от изображения к изображению и переименовав его с числом, которое увеличивается на единицу с каждым циклом.

Вы можете сделать это с помощью:

n=1 
for i in *.jpg; do 
    p=$(printf "%04d.jpg" ${n}) 
    mv ${i} ${p} 
    let n=n+1 
done 

Просто введите его в терминал построчно.

Если вы хотите поставить пользовательское имя перед номерами, вы можете поместить его перед знаком процента в третьей строке.

Если вы хотите изменить количество цифр в номере имен, просто замените «4» в третьей строке (не меняйте «0», хотя).

+0

Большое вам спасибо. Это сработало. Yahooooooooo !!!!! :) Мне нравится stackoverflow. Ура !!! – ThN

1

я буду считать, что:

  • Там нет пробелов или другие странные символы управления в именах файлов
  • Все файлы в данной директории JPEG файлы

То, что в ум, переименовать все файлы на 1.jpg, 2.jpg и т. д .:

N=1 
for a in ./* ; do 
    mv $a ${N}.jpg 
    N=$(($N + 1)) 
done 

Если есть являются пробелами в именах файлов:

find . -type f | awk 'BEGIN{N=1} 
    {print "mv \"" $0 "\" " N ".jpg" 
    N++}' | sh 

Должно быть возможно их переименование.

Суть в том, Linux/UNIX имеет много инструментов, которые могут автоматизировать задачи, как это, но у них есть немного кривой обучения для них

+0

спасибо. Итак, где вы запускаете этот код? Прямо в Терминале? – ThN

0

Я написал сценарий PERL время давно назад, чтобы сделать довольно много, что вы хотите:

# 
# reseq.pl renames files to a new named sequence of filesnames 
# 
# Usage: reseq.pl newname [-n seq] [-p pad] fileglob 
# 
use strict; 
my $newname = $ARGV[0]; 
my $seqstr = "01"; 
my $seq = 1; 
my $pad = 2; 

shift @ARGV; 

if ($ARGV[0] eq "-n") { 
    $seqstr = $ARGV[1]; 
    $seq = int $seqstr; 
    shift @ARGV; 
    shift @ARGV; 
} 

if ($ARGV[0] eq "-p") { 
    $pad = $ARGV[1]; 
    shift @ARGV; 
    shift @ARGV; 
} 

my $filename; 
my $suffix; 

for (@ARGV) { 
    $filename = sprintf("${newname}_%0${pad}d", $seq); 
    if (($suffix) = m/.*\.(.*)/) { 
     $filename = "$filename.$suffix"; 
    } 
    print "$_ -> $filename\n"; 
    rename ($_, $filename); 
    $seq++; 
} 

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

Для exmaple:

# reseq.pl abc 1 2 *.jpg 

будет переименовать все соответствующие файлы в abc_01.jpg, abc_02.jpg, abc_03.jpg ...

1

Создать скрипт, содержащий:

#!/bin/sh 

filePrefix="$1" 
sequence=1 

for file in $(ls -tr *.jpg) ; do 
    renamedFile="$filePrefix$sequence.jpg" 
    echo $renamedFile 
    currentFile="$(echo $file)" 
    echo "renaming \"$currentFile\" to $renamedFile" 
    mv "$currentFile" "$renamedFile" 
    sequence=$(($sequence+1)) 
done 
exit 0 

Если вы назвали сценарий, скажем, RenameSequentially тогда вы могли бы выдать команду:

./RenameSequentially Images-

Это переименовывать бы все * .jpg файлов в каталоге до Image-1.jpg, Image-2.jpg и т. д. ... в порядке старейших и новейших ... проверенных в командной оболочке OS X.

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