У меня есть проблема, с которой я сталкиваюсь в течение 6-7 часов, и я не могу преодолеть ее, вот почему я прошу Вашу справку. Я должен создать сценарий удара, который получает доступ к папке и переименовывает все файлы от нее с новым именем, сопровождаемым числом, которое представляет alalphabetic hierachy и новое расширение.
Параметры находятся в этом порядке:
(Новое имя, новое расширение и папка, где я ищу).
Как пример:./rename.sh работают .txt Документы
Скажем, это первоначально документ (Документы) содержало:
a.txt
b.txt
c.txt
Поэтому afer запускающий скрипта документ будет containt следующее: work01.txt (от a.txt)
work02.txt (от b.txt)
work03.txt (от c.txt)
Проблема состоит в том, что так или иначе я копирую файлы, и я создаю большую путаницу. Вот сценарий (rename.sh):
#!/bin/bash
if [ -z "$3" ]
then
echo "No argumets supplied"
else
mic="0"
i="1"
max="9"
for file in `ls $3 | sort -V`; do
if ( test $i -le 9)
then
cp $3/$file $3/$1$mic$i.$2
rm -r $3/$file
else
if ( test $i -ge 9 )
then
cp $3/$file $3/$1$i.$2
rm -r $3/$file
fi
fi
i=$((i+1))
done
echo "$max"
fi
Если Ваши файлы называют a.txt, b.txt и так далее, то порядок сопоставления по умолчанию должен позволить Вам делать простое расширение шарика имени файла, вместо того, чтобы нуждаться к явно виду версии в файлах. Таким образом, я предложил бы делать что-то больше как
i=1
cd "$dir"
for old in *."$ext"; do
printf -v new '%s%02d.%s' "$newbase" $((i++)) "$ext"
echo mv "$old" "$new"
done
после присвоения newbase="$1"
, ext="$2"
, dir="$3"
(с подходящим существованием проверяет, конечно). Игра с ним и удаляет echo
однажды печатные выходные корректные взгляды.