Pages : 1
#1 Le 02/04/2010, à 11:42
- nourinux
commande find
Bonjour! je voudrai trouver le fichier ordinaire le plus volumineux du repertoire /etc à l'aide de la commande find mais je n'arrive pas à avoir l'option qui convient... J'ai besion de votre aide!
Merci...
nbinux
Hors ligne
#2 Le 02/04/2010, à 11:55
- olsman037
Re : commande find
Salut,
petite recherche google sur les commandes find et sort
cd /etc
ls -lS $(find . -type f) | less
devrait te donner ce qu'il faut...
http://www.computing.net/answers/unix/s … /6006.html
Ca ne te donne pas le plus gros, mais tous par ordre de taille... Il n'y a qu'a prendre le premier...
Dernière modification par olsman037 (Le 02/04/2010, à 11:56)
Sony Vaio VPC-SB1C5E, i7-2620M, 8Go, GPU AMD 6470M avec triple boot W7, Ubuntu 10.10 et Arch...
Galère les nouveaux sony sous linux!!!! (switch AMD/Intel, touchpad, ethernet,....)
Hors ligne
#3 Le 02/04/2010, à 12:41
- nourinux
Re : commande find
Merci...
nbinux
Hors ligne
#4 Le 02/04/2010, à 12:53
- olsman037
Re : commande find
de rien.. Ca a marché ? Si oui tu peux mettre résolu dans le titre de ton post...
(modifier le premier post, et changer le titre..)
Sony Vaio VPC-SB1C5E, i7-2620M, 8Go, GPU AMD 6470M avec triple boot W7, Ubuntu 10.10 et Arch...
Galère les nouveaux sony sous linux!!!! (switch AMD/Intel, touchpad, ethernet,....)
Hors ligne
#5 Le 02/04/2010, à 18:05
- nourinux
Re : commande find
Oh non ça na pas marché, le shell il ne reconnait pas les parentheses...
nbinux
Hors ligne
#6 Le 02/04/2010, à 20:14
- nesthib
Re : commande find
@nourinux : ça fonctionne très bien tu as dû mal recopier la commande. Sinon quel shell utilises-tu ?
petit ajout pour éviter d'afficher les erreurs :
ls -lS $(find /etc -type f 2>/dev/null) | head -n 1
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#7 Le 03/04/2010, à 21:58
- sputnick
Re : commande find
Autre solution, surement plus fiable que la précédente car ls a un nombre limité de paramètres à traiter :
find /etc -printf '%s\t%h/%f\n' | sort -n | awk 'END{print $2}'
( Edit : remplacé "nombre maximum limité de fichiers" par "nombre limité de paramètres" )
Dernière modification par sputnick (Le 13/04/2010, à 00:26)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#8 Le 12/04/2010, à 23:12
- johndo
Re : commande find
Bonsoir,
Autre solution, surement plus fiable que la précédente car ls a un nombre maximum limité de fichier à traiter
Ceci est erroné. La commande ls n'a pas de limite maximum de fichiers à traiter. Le problème auquel tu dois faire référence est celui de la taille limite du buffer dédié aux paramètres des instructions et donc n'est pas lié à l'instruction.
Pour preuve :
( attention, script extrêmement long )
cd /tmp
for((i=1;i<=300000;i++)); do touch $i aaaaaaaaaaaaaaaaaaaaaaaaa$i; f+=( $i ); fa+=( aaaaaaaaaaaaaaaaaaaaaaaaa$i ) ; done
ls ${fa[@]}
#bash: /bin/ls: Liste d'arguments trop longue
ls ${f[@]}
#bash: /bin/ls: Liste d'arguments trop longue
i=$((${#fa[@]}-1))
st=1
while [ $st -ne 0 ]; do
ls ${fa[@]} >& /dev/null
st=$?
[ ${st} -ne 0 ] && { unset fa[i]; ((i--)); }
done
echo ${#fa[@]}
i=$((${#f[@]}-1))
st=1
while [ $st -ne 0 ]; do
ls ${f[@]} >& /dev/null
st=$?
[ ${st} -ne 0 ] && { unset f[i]; ((i--)); }
done
echo ${#f[@]}
Dernière modification par johndo (Le 12/04/2010, à 23:15)
Hors ligne
#9 Le 13/04/2010, à 00:23
- sputnick
Re : commande find
Voila de quoi je parles :
ls -lS $(find /usr)
bash: /bin/ls: Liste d'arguments trop longue
Après, on peux débattre des termes employés, effectivement j'aurais du parler de paramètres et non de fichier, mais le but premier c'est d'expliquer que la solution du
ls $(find)
n'est pas fiable.
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#10 Le 13/04/2010, à 09:22
- johndo
Re : commande find
Oui, s'est bien cette erreur à laquelle je fais aussi référence (regarde mon script, elle est en commentaire). Sinon, je comprends tout à fait ce que tu démontres mais ce que moi je souhaite précisé est que ce n'est pas l'instruction ls qui la retourne, c'est le système.
Elle n'a pas comme origine la quantité de paramètres (ou de fichiers dans le cas de ls) mais un dépassement de taille du buffer dédié aux paramètres. C'est complétement différent.
En effet, tu peux très bien avoir cette erreur avec 1 seul paramètre si ce dernier a une taille supérieur à ce buffer ('faut en vouloire )
Dernière modification par johndo (Le 13/04/2010, à 09:22)
Hors ligne
Pages : 1