Existe-t-il une commande Linux que je peux appeler à partir d'un script Bash qui imprimera la structure du répertoire sous la forme d'une arborescence, par exemple,
folder1
a.txt
b.txt
folder2
folder3
Existe-t-il une commande Linux que je peux appeler à partir d'un script Bash qui imprimera la structure du répertoire sous la forme d'une arborescence, par exemple,
folder1
a.txt
b.txt
folder2
folder3
Réponses:
Est-ce ce que vous cherchez un arbre ? Il devrait figurer dans la plupart des distributions (peut-être en tant qu'installation facultative).
~> tree -d /proc/self/
/proc/self/
|-- attr
|-- cwd -> /proc
|-- fd
| `-- 3 -> /proc/15589/fd
|-- fdinfo
|-- net
| |-- dev_snmp6
| |-- netfilter
| |-- rpc
| | |-- auth.rpcsec.context
| | |-- auth.rpcsec.init
| | |-- auth.unix.gid
| | |-- auth.unix.ip
| | |-- nfs4.idtoname
| | |-- nfs4.nametoid
| | |-- nfsd.export
| | `-- nfsd.fh
| `-- stat
|-- root -> /
`-- task
`-- 15589
|-- attr
|-- cwd -> /proc
|-- fd
| `-- 3 -> /proc/15589/task/15589/fd
|-- fdinfo
`-- root -> /
27 directories
échantillon extrait de la page Web du responsable.
Vous pouvez ajouter l'option -L #
où #
est remplacé par un nombre, pour spécifier la profondeur de récursivité maximale.
Supprimer -d
pour afficher également les fichiers.
-d
pour afficher également les fichiers!
brew install tree
apt-cyg install tree
(en supposant que vous avez installé apt-cyg)
apt-get install tree
l'installera.
Vous pouvez utiliser celui-ci:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
Il montrera une représentation graphique des sous-répertoires actuels sans fichiers en quelques secondes , par exemple dans /var/cache/:
.
|-apache2
|---mod_cache_disk
|-apparmor
|-apt
|---archives
|-----partial
|-apt-xapian-index
|---index.1
|-dbconfig-common
|---backups
|-debconf
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\// /g' -e 's/^/ /'
.git
?
find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
Pour ajouter la solution de Hassou à votre .bashrc, essayez:
alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'"
alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'"''
Cette commande fonctionne pour afficher les dossiers et les fichiers .
find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
Exemple de sortie:
.
|-trace.pcap
|-parent
| |-chdir1
| | |-file1.txt
| |-chdir2
| | |-file2.txt
| | |-file3.sh
|-tmp
| |-json-c-0.11-4.el7_0.x86_64.rpm
Source: Commentaire de @javasheriff ici . Son submergé en tant que commentaire et le poster comme réponse aide les utilisateurs à le repérer facilement.
find . |grep -vE 'pyc|swp|__init' | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
fonctionnait bien
J'améliore la sortie de la réponse de @ Hassou avec:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//──/g' -e 's/─/├/' -e '$s/├/└/'
Cela ressemble beaucoup à la sortie de tree
maintenant:
.
├─pkcs11
├─pki
├───ca-trust
├─────extracted
├───────java
├───────openssl
├───────pem
├─────source
├───────anchors
├─profile.d
└─ssh
Vous pouvez également en créer un alias:
alias ltree=$'ls -R | grep ":$" | sed -e \'s/:$//\' -e \'s/[^-][^\/]*\//──/g\' -e \'s/─/├/\' -e \'$s/├/└/\''
BTW, tree
n'est pas disponible dans certains environnements, comme MinGW. Le suppléant est donc utile.
Vous pouvez également utiliser la combinaison des commandes find et awk pour imprimer l'arborescence des répertoires. Pour plus de détails, reportez-vous à " Comment imprimer une structure de répertoires arborescents à plusieurs niveaux à l'aide des commandes combinées linux find et awk "
find . -type d | awk -F'/' '{
depth=3;
offset=2;
str="| ";
path="";
if(NF >= 2 && NF < depth + offset) {
while(offset < NF) {
path = path "| ";
offset ++;
}
print path "|-- "$NF;
}}'
find
. Oufind . -not -path '*/\.*'
pour masquer les fichiers et dossiers commençant par.
. Si vous voulez avoir une sortie avec des espaces, comme dans la question, utilisez-la avec ce script "find prettifier":find . -not -path '*/\.*' | python -c "import sys as s;s.a=[];[setattr(s,'a',list(filter(lambda p: c.startswith(p+'/'),s.a)))or (s.stdout.write(' '*len(s.a)+c[len(s.a[-1])+1 if s.a else 0:])or True) and s.a.append(c[:-1]) for c in s.stdin]"