0 votes

Obtenir le chemin absolu avec la commande "ls"

Est-il possible de sortir le chemin absolu du fichier lors de l'exécution de ls -l sur Android (par exemple via adb shell ou dans une application de terminal) ?

Voici la sortie que j'obtiens avec ls -l /etc/ (j'ai un accès root) :

E:\Dropbox\Droid Explorer\src\main\resources\com\droid\explorer\adb>adb shell su root ls -l /etc/
-rw-r--r-- root     root        16656 2009-01-01 03:00 CHANGELOG-CM.txt
-rw-r--r-- root     root         9944 2009-01-01 03:00 CHANGES.txt
-rw-r--r-- root     root       154482 2009-01-01 03:00 NOTICE.html.gz
drwxr-xr-x root     root              2009-01-01 03:00 acdbdata
-rw-r--r-- root     root       598006 2009-01-01 03:00 apns-conf.xml
-rw-r--r-- root     root         5491 2009-01-01 03:00 audio_effects.conf
-rw-r--r-- root     root         6198 2009-01-01 03:00 audio_policy.conf
drwxr-xr-x root     root              2009-01-01 03:00 bash
drwxr-xr-x root     root              2009-01-01 03:00 bluetooth
-rw-r--r-- root     root       101774 2009-01-01 03:00 build-manifest.xml
-rw-r--r-- root     root         1045 2009-01-01 03:00 clatd.conf
drwxr-xr-x root     root              2009-01-01 03:00 dhcpcd
-rw-r--r-- root     root         1362 2009-01-01 03:00 ethertypes
-rw-r--r-- root     root        18300 2009-01-01 03:00 event-log-tags
-rw-r--r-- root     root        14309 2009-01-01 03:00 fallback_fonts.xml

Ce que je voudrais obtenir est le chemin absolu, par exemple :

E:\Dropbox\Droid Explorer\src\main\resources\com\droid\explorer\adb>adb shell su root ls -l /etc/
-rw-r--r-- root     root        16656 2009-01-01 03:00 /etc/CHANGELOG-CM.txt
-rw-r--r-- root     root         9944 2009-01-01 03:00 /etc/CHANGES.txt
-rw-r--r-- root     root       154482 2009-01-01 03:00 /etc/NOTICE.html.gz
drwxr-xr-x root     root              2009-01-01 03:00 /etc/acdbdata
-rw-r--r-- root     root       598006 2009-01-01 03:00 /etc/apns-conf.xml
-rw-r--r-- root     root         5491 2009-01-01 03:00 /etc/audio_effects.conf
-rw-r--r-- root     root         6198 2009-01-01 03:00 /etc/audio_policy.conf
drwxr-xr-x root     root              2009-01-01 03:00 /etc/bash
drwxr-xr-x root     root              2009-01-01 03:00 /etc/bluetooth
-rw-r--r-- root     root       101774 2009-01-01 03:00 /etc/build-manifest.xml
-rw-r--r-- root     root         1045 2009-01-01 03:00 /etc/clatd.conf
drwxr-xr-x root     root              2009-01-01 03:00 /etc/dhcpcd
-rw-r--r-- root     root         1362 2009-01-01 03:00 /etc/ethertypes
-rw-r--r-- root     root        18300 2009-01-01 03:00 /etc/event-log-tags
-rw-r--r-- root     root        14309 2009-01-01 03:00 /etc/fallback_fonts.xml

1voto

Guillermo Gomez Points 423

ls par défaut liste tout ce qui est fourni en tant qu'argument. De man ls:

-d, --directory liste uniquement les répertoires eux-mêmes, pas leur contenu

-l utiliser un format de liste longue

Vous pouvez donc simplement fournir tout ce qui se trouve à l'intérieur de votre répertoire cible, et ajouter l'option -d.

[adb shell] [su -c] ls -dl /etc/*
^ optionnel, dépendant de votre environnement shell

Ce qui donne

rwxr--r-- 1 root root 1024 Jun 4 22:32 /etc/hosts
...
(et une liste solitaire)

0voto

Firelord Points 23064

Depuis que Android est rooté, vous pouvez utiliser l'une des commandes suivantes:

\# Remplacez DIR par le chemin du répertoire; préfixez **adb shell** où que ce soit.

su -c 'busybox ls -ld DIR\*'  
su -c 'toybox ls -ld DIR\*'
su -c 'ls -d DIR\*'  # cela ne fonctionne pas avec le format de liste long disponible avec -l

(Avec l'aimable autorisation de la réponse de <a href="https://serverfault.com/a/242229">ici</a> d'Andrew pour lister l'argument <em>-d</em>).

Android Marshmallow est livré avec Toybox. Pour toute autre version d'Android, vous devriez installer BusyBox ou Toybox.

Exemple:

IMG

0 votes

Ainsi, je suppose que le adb shell ls est limité. Dommage, j'espérais pouvoir faire cela sans busybox. Merci quand même

0voto

user243933 Points 11

Vous pouvez également écrire une fonction de liste récursive en sh - cette fonction peut être copiée-collée dans adb shell, sans les permissions root :

function rcrls() { ls -d $1/* | while read f; do echo "$f"; if [ -d "$f" ]; then rcrls "$f"; fi; done }

Ensuite, utilisez-la comme suit :

shell@myphone:/ $ rcrls /

Malheureusement, cela ne persiste que pour la session actuelle de adb shell, une fois que vous en sortez, vous devrez le coller à nouveau; ou vous pouvez l'utiliser comme ceci :

$ adb shell 'function rcrls() { ls -d $1/* | while read f; do echo "$f"; if [ -d "$f" ]; then rcrls "$f"; fi; done } ; rcrls /' | less

Ensuite, vous pouvez voir les fichiers répertoriés comme :

...
//acct/uid/1000
//acct/uid/1000/cgroup.clone_children
//acct/uid/1000/cgroup.event_control
//acct/uid/1000/cgroup.procs
//acct/uid/1000/cpuacct.stat
//acct/uid/1000/cpuacct.usage
...

Pour obtenir une liste avec les infos -l, c'est un peu délicat, car il n'y a pas de sed fonctionnel sur adb shell; cependant, nous pouvons utiliser l'expansion de variable shell et le tronquage pour supprimer le nom de base de la liste, puis nous pouvons ajouter le chemin complet :

function rcrls() { 
  ls -d $1/* | while read f; do 
    if [ -d "$f" ]; then 
       fl="$(ls -ld $f/)"; 
       echo "${fl%\ *}" "$f"; 
       rcrls "$f"; 
    else 
       fl="$(ls -l $f)"; 
       echo "${fl%\ *}" "$f"; 
    fi; 
  done 
} ; 
rcrls /

Ou, en une ligne :

adb shell 'function rcrls() { ls -d $1/* | while read f; do if [ -d "$f" ]; then fl="$(ls -ld $f/)"; echo "${fl%\ *}" "$f"; rcrls "$f"; else fl="$(ls -l $f)"; echo "${fl%\ *}" "$f"; fi; done } ; rcrls /' | less

... et ensuite vous obtenez une liste comme :

drwxr-xr-x root     root              2017-11-15 02:29 //acct
-rw-r--r-- root     root            0 2017-11-15 02:29 //acct/cgroup.clone_children
--w--w--w- root     root            0 2017-11-15 02:29 //acct/cgroup.event_control
-rw-r--r-- root     root            0 2017-11-15 02:29 //acct/cgroup.procs
-r--r--r-- root     root            0 2017-11-15 02:29 //acct/cpuacct.stat
...

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X