У меня 640 файлов в следующем виде
string02_01.ext, string02_02.ext, string02_03.ext ...
Мне нужно переименовать их все, чтобы каждые 40 элементов меняли шаблон, например
first 40s: a0b0c0.ext, a1b0c0.ext, a2b0c0.ext ...
second 40s: a0b1c0.ext, a1b1c0.ext, a2b1c0.ext ...
third 40s: a0b2c0.ext, a1b2c0.ext, a2b2c0.ext ...
fourth 40s: a0b3c0.ext, a1b3c0.ext, a2b3c0.ext ...
Что было бы хорошим способом сделать это? Любые идеи будут оценены.
заранее спасибо
Я ожидаю, что так будут организованы ваши 640 имен файлов,
Row 1: a0b0c0.ext a1b0c0.ext ... a39b0c0.ext Row 2: a0b1c0.ext a1b1c0.ext ... a39b1c0.ext ... Row 16: a0b15c0.ext a1b15c0.ext ... a39b15c0.ext
Предполагая, что у вас есть список из 640 файлов (по одному в строке),
отсортированы в том порядке, в котором вы хотите, чтобы они были переименованы.
(это можно сделать с помощью следующих команд).
cd /directory/containint/the/files
find . -name string02_*.ext > files.lst
# maybe you'll run a 'sort' pipe to get files.lst ordered as you want.
Обратите внимание, что ваши 640 файлов не могут иметь форму string02_nn.ext
,
Тогда они, вероятно, будут `string02_nnn.ext ....
не имеет значения, поскольку мы используем указанную выше схему.
Скрипт bash для переименования должен выглядеть так:
#!/bin/bash
i=0;
j=0;
k=0;
for f in $(<files.lst)
do
mv $f a${k}b${j}c0.ext # rename happens here
if (( $i % 40 == 0 )); then
j=$(($j + 1));
k=0;
else
k=$(($k + 1));
fi
i=$(($i + 1));
done
Для этого вам не нужно регулярное выражение, вам нужен обычный сценарий оболочки, который выполняет итерацию по файлам по мере необходимости. Предполагая, что вы хотите, чтобы этот 40-й файл был назван a39b0c0.ext
, что-то вроде этого сценария оболочки должно помочь:
a=0
b=0
c=0
for f in string02_*.ext; do # Assuming that you're running this in the directory with the files
if [ "$a" = "40" ]; then
a=0
b=$(($b + 1))
fi
if [ "$b" = "40" ]; then
b=0
c=$(($c + 1))
fi
mv $f a${a}b${b}c${c}.ext
a=$(($a + 1))
done
не уверен, что это точное соответствие вашим потребностям, но взгляните на mmv. он может выполнять массовые переименования, например:
file1.txt
file2.txt
file3.txt
mmv "file*.txt" "#1_file.txt"
1_file.txt
2_file.txt
3_file.txt
если вы используете дистрибутив, подобный Debian, просто apt-get mmv.