LinuxForum.Fans
Тема

Помогите реализовать получение списка файлов в папке + диалог.

Автор: inux 38 сообщений 11146 просмотров
#273668

Все, что ниже относится к быстрому и удобному восстановлению бэкапов из консоли:


По этому пути /var/mobile/Media/general_storage/icon/
лежат архивы, в таком формате:

скрин:

Показать

в них бэкапы данных, которые можно восстановить...
для этого нужно содержимое архива скопировать в корень и извлечь.
так вот, хотелось бы это делать удобно - с помощью одной команды:
"back" - выполнив которую, появляется примерно такое в консоле:



выполнив команду "back" - проверяется директория, создается список файлов, и затем показывается диалог, в котором вводим к примеру цифру 2 (см.2 скрин)
и файл icon_05-09-2012_01:33.zip копируется в корень и распаковывается! все!

Уважаемые форумчане, просьба помочь.
Возможно вы сможите подсказать более удобное восстановление.
Спасибо.

P.S В итоге, помог XELFAER!
Огромное спасибо!

Спасибо всем, кто пытался хоть как то помочь!

#273672

как я понимаю, создаем файл "back" и он выполняет следующее:
1. Получает список файлов
2. И генерирует из этого списка примерно такое и запускает:
-------------------------------------------


Код:

Показать
#!/bin/bash

STORAGE="/var/mobile/Media/general_storage/"

# Выводим на экран

echo "Выбрать цифрой архив для восстановления"

echo "1. icon_04-09-2012_01:33.zip"
echo "2. icon_05-09-2012_01:33.zip"
echo "3. icon_06-09-2012_01:33.zip"
echo "4. icon_07-09-2012_01:33.zip"
echo "5. icon_08-09-2012_01:33.zip"

echo ''
echo -n "Введите цифру [1,2,3 ...]? "
read choice

if [ $choice -eq 1 ]; then
cp $STORAGE/icon/icon_04-09-2012_01:33.zip /x.zip
unzip -o -X -K /x.zip &> /dev/null
else

if [ $choice -eq 2 ]; then
cp $STORAGE/icon/icon_05-09-2012_01:33.zip /x.zip
unzip -o -X -K /x.zip &> /dev/null
else

if [ $choice -eq 3 ]; then
cp $STORAGE/icon/icon_06-09-2012_01:33.zip /x.zip
unzip -o -X -K /x.zip &> /dev/null
else

if [ $choice -eq 4 ]; then
cp $STORAGE/icon/icon_07-09-2012_01:33.zip /x.zip
unzip -o -X -K /x.zip &> /dev/null
else

if [ $choice -eq 5 ]; then
cp $STORAGE/icon/icon_08-09-2012_01:33.zip /x.zip
unzip -o -X -K /x.zip &> /dev/null
else

fi
fi
fi
fi
fi


exit
#273708

Это не реально сделать?

#273712

Кучу if ... fi нужно заменить одним

text

case choise in
...
esac

Команды по восстановлению из архива оформить функцией. Да, и зачем вы перед разархивированием копируете архив?

P.S. А чем вам не нравятся готовые решения?

#273731
inux написал:
Команды по восстановлению из архива оформить функцией. Да, и зачем вы перед разархивированием копируете архив?

помогите пожалуйста сделать - как правильно )

#273732

\\\P.S. А чем вам не нравятся готовые решения?
а такие есть? )

#273733

реализовал все связанное с бэкапом - все ОК

скрин:

Показать

а вот с восстановление... не знаю как поступить.
нужно, что бы легко и просто выбираем в меню "восстановить" \ далее выбираем "минимальный бэкап" или "основной" или "иконки! и т.д...
появляется список с архивами \ выбираем архив \ ентер = все.

сейчас же, на устройстве легко и просто восстановить бэкап не возможно ((

#273739

за вас мне писать лень, так что основные идеи:
1. считываешь список файлов в bash-массив... хинт: тут могут понадобится циклы...
2. потом печатаешь первые k из них
3. выбираешь n-й
4. и соответственно его распаковываешь
5. ????????
6. PROFIT!!!

чтиво на досуг: http://www.opennet.ru/docs/RUS/bash_scripting_guide/
ЗЫ: в zip архивировать, вообще говоря, плохая идея — он не сохраняет никакие атрибуты, а также линки, трубы и другие необычные файлы...

#273740

если в качестве ввода использовать имя архива то вот:

Показать
text

#!/bin/bash
cd /var/mobile/Media/general_storage/icon/

#ищем в каталоге архивы и выводим for i in *.zip; do echo $((j+=1))'. '$i; done;

#ввод имени архива echo "Введите имя архива:"; read name; echo "Выбран архив: "$name;

#распаковываем выбранный архив unzip /var/mobile/Media/general_storage/icon/$name -d / exit 0

#273822

XELFAER, спасибо за помощь!

То, что надо!
Но:

Показать
iPhone:~ root# zzz
1. icon_03-09-2012_22:55.zip
2. icon_03-09-2012_23:05.zip
3. icon_03-09-2012_23:17.zip
4. icon_03-09-2012_23:18.zip
5. icon_03-09-2012_23:19.zip
6. icon_04-09-2012_01:32.zip
7. icon_04-09-2012_01:33.zip
8. icon_04-09-2012_01:51.zip
9. icon_04-09-2012_01:54.zip
10. icon_04-09-2012_01:56.zip
11. icon_05-09-2012_02:26.zip
12. icon_05-09-2012_19:13.zip
13. icon_05-09-2012_19:57.zip
14. icon_06-09-2012_01:07.zip
15. icon_06-09-2012_02:13.zip
16. icon_06-09-2012_13:27.zip
Введите имя архива:
15
Выбран архив: 15
unzip: cannot find or open /var/mobile/Media/general_storage/iLEX/icon/15, /var/mobile/Media/general_storage/iLEX/icon/15.zip or /var/mobile/Media/general_storage/iLEX/icon/15.ZIP.
iPhone:~ root#

можно подправить? )

#273825
Fat-Zer написал:
за вас мне писать лень, так что основные идеи:
1. считываешь список файлов в bash-массив... хинт: тут могут понадобится циклы...
2. потом печатаешь первые k из них
3. выбираешь n-й
4. и соответственно его распаковываешь
5. ????????
6. PROFIT!!!

чтиво на досуг: http://www.opennet.ru/docs/RUS/bash_scripting_guide/
ЗЫ: в zip архивировать, вообще говоря, плохая идея — он не сохраняет никакие атрибуты, а также линки, трубы и другие необычные файлы...

вот так у меня реализован бэкап:

Показать
#!/bin/sh

# ====================================
# Title:
# ====================================


STORAGE="/var/mobile/Media/general_storage"
PREFERENCES="/var/mobile/Library/Preferences"
mybackup="/mybackup"

/usr/bin/ilex_del

echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';
echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';
echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';

#sleep 1s

echo "Пожалуйста подождите, архивирую..."

rm -f $STORAGE/bckupok.zip &> /dev/null
zip -r $STORAGE/bckupok.zip /etc/apt/sources.list.d/ &> /dev/null

#sleep 2s

echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';
echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';
echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';

echo ''
echo 'Сохранил репозитории, твики, приложения и зависимости Cydia (список для восстановления)'
echo 'продолжаю...'
echo ''



if [ -e $mybackup ]; then
/mybackup
else
echo ''
fi



###################

zip $STORAGE/bckupok.zip /var/mobile/Library/AddressBook/AddressBook.sqlitedb &> /dev/null ### Контакты
zip $STORAGE/bckupok.zip /var/mobile/Library/AddressBook/AddressBookImages.sqlitedb &> /dev/null ### Контакты
zip -r $STORAGE/bckupok.zip /var/mobile/Library/Calendar/ &> /dev/null #### Календарь, Напоминания
zip -r $STORAGE/bckupok.zip /var/mobile/Library/SMS/ &> /dev/null ### СМС
zip -r $STORAGE/bckupok.zip /var/mobile/Library/Safari/ &> /dev/null #### История Safari
zip -r $STORAGE/bckupok.zip /var/mobile/Library/Cookies/ &> /dev/null #### История Cookies
zip -r $STORAGE/bckupok.zip /var/mobile/Library/Notes/ &> /dev/null #### Заметки
zip -r $STORAGE/bckupok.zip /var/mobile/Library/Mail/ &> /dev/null #### Почта
zip -r $STORAGE/bckupok.zip /var/wireless/Library/CallHistory/ &> /dev/null #### История звонков
zip $STORAGE/bckupok.zip /var/mobile/Library/SpringBoard/IconSupportState.plist &> /dev/null #### Расположение папок и иконок
zip $STORAGE/bckupok.zip /mybackup &> /dev/null #### mybackup

#sleep 2s

echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';
echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';
echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';

echo 'Сохранено в архив:'
echo ''
echo 'Контакты (телефонная книга)'
echo 'СМС (история)'
echo 'Звонки (история)'
echo 'Заметки'
echo 'Календарь'
echo 'Напоминания'
echo 'Почта'
echo 'Safari (cookies, история)'
echo 'Расположение папок и иконок'

echo ''
#sleep 3s

######################




cd $STORAGE &> /dev/null
mkdir iLEX &> /dev/null
cd $STORAGE/iLEX &> /dev/null
mkdir mini &> /dev/null
chown -R mobile:mobile $STORAGE/iLEX &> /dev/null
chown -R mobile:mobile $STORAGE/iLEX/mini &> /dev/null

mv -f $STORAGE/bckupok.zip $STORAGE/iLEX/mini/mini_`date '+%d-%m-%Y_%R'`.zip &> /dev/null





zip $STORAGE/bckupok.zip /var/mobile/Library/SpringBoard/IconSupportState.plist &> /dev/null #### Расположение папок и иконок

cd $STORAGE &> /dev/null
mkdir iLEX &> /dev/null
cd $STORAGE/iLEX &> /dev/null
mkdir icon &> /dev/null
chown -R mobile:mobile $STORAGE/iLEX &> /dev/null
chown -R mobile:mobile $STORAGE/iLEX/icon &> /dev/null

mv -f $STORAGE/bckupok.zip $STORAGE/iLEX/icon/icon_`date '+%d-%m-%Y_%R'`.zip &> /dev/null





zip -r $STORAGE/bckupok.zip $PREFERENCES/ &> /dev/null #### Настройки (Preferences)

cd $STORAGE &> /dev/null
mkdir iLEX &> /dev/null
cd $STORAGE/iLEX &> /dev/null
mkdir preferences &> /dev/null
chown -R mobile:mobile $STORAGE/iLEX &> /dev/null
chown -R mobile:mobile $STORAGE/iLEX/preferences &> /dev/null

mv -f $STORAGE/bckupok.zip $STORAGE/iLEX/preferences/preferences_`date '+%d-%m-%Y_%R'`.zip &> /dev/null





cd $STORAGE &> /dev/null
mkdir iLEX &> /dev/null
cd $STORAGE/iLEX &> /dev/null
mkdir cydia &> /dev/null
cd $STORAGE/iLEX/cydia/ &> /dev/null
mkdir tweaks &> /dev/null
chown -R mobile:mobile $STORAGE/iLEX &> /dev/null
chown -R mobile:mobile $STORAGE/iLEX/cydia &> /dev/null
chown -R mobile:mobile $STORAGE/iLEX/tweaks &> /dev/null


dpkg --get-selections | grep -v deinstall | grep -v gsc | sed -e 's/[\t]install//' > $STORAGE/mytweaks.txt

zip $STORAGE/bckupok.zip $STORAGE/mytweaks.txt &> /dev/null #### tweaks
mv -f $STORAGE/bckupok.zip $STORAGE/iLEX/cydia/tweaks/tweaks_`date '+%d-%m-%Y_%R'`.zip &> /dev/null
rm -rf $STORAGE/mytweaks.txt




echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';
echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';
echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';echo '';



echo 'Бэкап успешно создан!'
echo 'Архив "mini-xxxx.zip" находится в "Общем хранилище" папка "mini"'
echo 'Не забывайте копировать папку "iLEX" в надежное место!'
echo ''


exit

создал скрипт интуитивно, без знаний написания скриптов...)
результатом работы удовлетворен! :)

...гляньте пожалуйста, если не сложно - посоветуйте, что бы Вы заменили..
спасибо

#273877
"inux" написал:
можно подправить? )

в начале сообщения я указал: что необходимо вводить имя архива: icon_03-09-2012_22:55.zip, или сделать имена архивов цифровыми в последовательном порядке что бы нумерация совпадала с именем архива.

так как Вы ввели

"inux" написал:
Введите имя архива:
15
Выбран архив: 15
unzip: cannot find or open /var/mobile/Media/general_storage/iLEX/icon/15, /var/mobile/Media/general_storage/iLEX/icon/15.zip or /var/mobile/Media/general_storage/iLEX/icon/15.ZIP.

не будет найдено имя архива так как введен порядковый номер.

#273881

нужно что бы при выборе было видно дату и время.
что для этого нужно?

#273882
"inux" написал:
нужно что бы при выборе было видно дату и время.

что бы понимать. что восстановится

#273883
"XELFAER" написал:
#распаковываем выбранный архив unzip /var/mobile/Media/general_storage/icon/$name -d / exit 0

можно сделать, что бы подставлялось имя выбранного архива, когда выбираем архив цифрой 15?
unzip /var/mobile/Media/general_storage/icon/$name -d / \\ получаем unzip /var/mobile/Media/general_storage/icon/icon_06-09-2012_02:13.zip -d /

#273917
Fat-Zer написал:
за вас мне писать лень, так что основные идеи:
1. считываешь список файлов в bash-массив... хинт: тут могут понадобится циклы...
2. потом печатаешь первые k из них
3. выбираешь n-й
4. и соответственно его распаковываешь
5. ????????
6. PROFIT!!!

чтиво на досуг: http://www.opennet.ru/docs/RUS/bash_scripting_guide/
ЗЫ: в zip архивировать, вообще говоря, плохая идея — он не сохраняет никакие атрибуты, а также линки, трубы и другие необычные файлы...

в bash_scripting ничего не понимаю.
может поможете? :'(

#273922
text

#!/bin/bash
STORAGE="/var/mobile/Media/general_storage/"
ARCHIVE_LIST=( $(cd $STORAGE/icon && ls *.zip) )

echo -n "Enter archive number: " read num

echo "Extracting archive ${ARCHIVE_LIST[ (( $num - 1 )) ]}..."

это идея... а дальше сам...

"inux" написал:
вот так у меня реализован бэкап:

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

#273923
Fat-Zer написал:


это идея... а дальше сам...

Спасибо!

Обращаюсь ко всем "прохожим"! *BYE*
Помогите "допилить" идею Fat-Zer. *BRAVO*
Пожалуйста. *SORRY*

#273925

...еще раз напомню, у меня нет знаний программирования (
а учить башскриптинг для того, что бы написать самому несколько строк - глупо.
делаю все по интуиции и на готовых примерах! )
я занимаюсь другими вещами...

... сюда пришел за помощью, к профессионалам )
в любом случае, благодарен всем. кто откликнулся!
...буду ждать готовое решение... а вдруг, у кого то найдется время помочь! :)

#273950
inux написал:
...еще раз напомню, у меня нет знаний программирования (
а учить башскриптинг для того, что бы написать самому несколько строк - глупо.
делаю все по интуиции и на готовых примерах! )
я занимаюсь другими вещами...

... сюда пришел за помощью, к профессионалам )
в любом случае, благодарен всем. кто откликнулся!
...буду ждать готовое решение... а вдруг, у кого то найдется время помочь! :)

Ничего глупого в этом нет, все с этого начинают.

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

Войдите или зарегистрируйтесь, чтобы ответить.