LINUX.ORG.RU

Вывести список директорий на убогом шелле от Андроида

 , , ,


0

2

Старый телефон с андроидом, где то версии около второй...

Куча команд недоступна, в том числе и test, ls c ключем -d, find и так далее.

Пытаюсь вывести директории так:

$ cd /sdcard/ && for d in .*/ */ ; do echo "$d" ; done
../
./
.BD_SAPI_CACHE/
.adobe-digital-editions/
.android_secure/
.bookmark_thumb1/
.data/
.estrongs/
Android/
BubbleUPnP/
DCIM/
Documents/
Download/
LOST.DIR/
My Documents/
backups/
baidu/
bugreports/
com.bluevpn/
media/
tmp/
zzz/
Первый вопрос , как убирать вот это: ../ ./

Далее, пытаюсь вывести диры в пустой папке:

$ cd /sdcard/zzz/ && for d in .*/ */ ; do echo "$d" ; done
../
./
*/

Опять же , как избавится от этих выводов: ../, ./, */ Если пустая папка - ничего не выводить, если не пустая папка - не выводить: ../, ./



Последнее исправление: FreakMurderer (всего исправлений: 2)

поставить надо тулчаин

Xwo
()
Ответ на: комментарий от droserasprout

Да не советуйте мне busybox-ы и т.д. Я это и без вас знаю. Мне нужно без busyboxa, без рута и т.д. На голом инструментарии

FreakMurderer
() автор топика
Ответ на: комментарий от anonymous

Ну вот я тебе прям с шелла и копирую результаты в форум, что еще надо?

FreakMurderer
() автор топика

Надо опрос провести, сколько у тутошнего контингента процент андроидов с/без busybox. :)

Тот оригинальный уже и не упомнишь что там есть. [ в том sh понимает?

vodz ★★★★★
()
Ответ на: комментарий от FreakMurderer

Мож как то скрипт дополнить, так со стрингами ? и т.д. подмутить. Я в шелл скриптинге не очень так...

FreakMurderer
() автор топика
Ответ на: комментарий от int13h

Не могу ниче инсталить к сожалению, тупо нужно обойтись тем что есть...

FreakMurderer
() автор топика
Ответ на: комментарий от vodz

да нет, там все что угодно почти «permission denied» такая особенность убогого шелла

FreakMurderer
() автор топика

Это проблема не андроида, а конкретного производителя:

user@p1:/ $ for D in $(ls -a /sdcard/); do [ -d /sdcard/$D ] && echo $D; done                                                                                
.DataStorage
.SystemConfig
...
.org.ebookdroid
.vkontakte
ACRCalls
AlReader
...
WhatsApp
WordPress
backups
com.facebook.katana
com.ksmobile.cb
com.szfunyun.btnotification
crash
kr.co.mz.sevendays
mobi.mgeek.TunnyBrowser
...
viber
yahoo
zedge


Это на стоковом нерутованном LG G4.

KRoN73 ★★★★★
()
Ответ на: комментарий от FreakMurderer

[: permission denied

Видимо, утилита или симлинк соответствующий есть, но производитель забыл exec-атрибут установить.

KRoN73 ★★★★★
()
Ответ на: комментарий от FreakMurderer

Дело в том, что можно и так написать:

Понятно, какая-то своя специфика. У меня так:

$ foobar
sh: foobar: not found

KRoN73 ★★★★★
()

Соррян за флуд, как сделать, чтобы все программы установленные на ведре создавали свои папки, например в ./config, то есть указать произвольный путь. А то мой маленький перфекционист каждый раз мучается глядя на /sdcard

imbaaa
()

Имеется целый Total Commander - для таких целей и затей.

Можно визуально просмотреть и углубиться в иерархию директорий на android device.

blitz
()

Возможно эти утилиты есть, но их нет в path. Лазил по системным каталогам?

anonymous
()

Зачем вообще шелл на телкфоне? Для красных глаз?

polozz
()
Ответ на: комментарий от FreakMurderer

Походу придется на с писать прогу...

А прогу потом запускать на телефоне? Так что тогда не busybox? Только не инсталлировать его, а запускать откуда-нибудь, не из системного места?

ls-h ★★★★★
()
Ответ на: комментарий от imbaaa

чтобы все программы установленные на ведре создавали свои папки, например в ./config

Вроде на последних ведроидах sdcard виртуализируется и приложения видят отведённую им директорию? Или я что-то путаю?

ls-h ★★★★★
()
Ответ на: комментарий от ls-h

Может кому надо: )

#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <limits.h>

void updatePath(char *path, int index, const char *name) {
    while ((path[index++] = *name++) != 0);
}

int main(int argc, char **argv) {
    if (argc != 2) return 0;
    struct dirent **dir;
    struct stat statbuf;
    int n = scandir(argv[1], &dir, 0, alphasort);
    if (n < 0) {
        perror(argv[1]);
        return 1;
    } else {
        char path[PATH_MAX + 1];
        int index;
        for (index = 0; argv[1][index] != '\0'; ++index) {
            path[index] = argv[1][index];
        }
        if (path[index - 1] != '/') {
            path[index] = '/';
            path[++index] = '\0';
        }
        for (int i = 0; i < n; i++) {
            char *name = dir[i]->d_name;
            if (!strcmp(name, ".") || !strcmp(name, "..")) {
            } else if (dir[i]->d_type == DT_DIR) {
                printf("d %s\n", name);
            } else if (dir[i]->d_type == DT_LNK) {
                updatePath(path, index, name);
                if (stat(path, &statbuf) == 0) {
                    if (S_ISDIR(statbuf.st_mode)) {
                        printf("l %s\n", name);
                    }
                }
            }
            free(dir[i]);
        }
        free(dir);
    }
    return 0;
}
Проверял на скорую руку, могут быть ошибки или не оптимизированный код.

FreakMurderer
() автор топика
Ответ на: комментарий от ls-h

Сделай мне busybox-ом быстрый вывод диров и симлинк-диров в удобном формате, то есть строка = дир.

Это работает слишком медленно:

cd / && for i in .* *; do busybox test -d "$i" && echo "$i" ; done
Если используется встроенный в шелл 'test', то другое дело, но его нету в убогом шелле андроида.

P.s. я не спорю, может можно как-то по другому, с радостью возьму на заметку.

FreakMurderer
() автор топика
Ответ на: комментарий от FreakMurderer

Сделай мне busybox-ом быстрый вывод диров и симлинк-диров

Попробуй busybox ls -1dLR

ls-h ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.