Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/04/2010, à 12: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, à 12: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, à 12: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, à 13:41

nourinux

Re : commande find

Merci...


nbinux

Hors ligne

#4 Le 02/04/2010, à 13: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, à 19: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, à 21:14

nesthib

Re : commande find

@nourinux : ça fonctionne très bien wink 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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 03/04/2010, à 22: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, à 01:26)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#8 Le 13/04/2010, à 00:12

johndo

Re : commande find

Bonsoir,

sputnick a écrit :

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 13/04/2010, à 00:15)

Hors ligne

#9 Le 13/04/2010, à 01: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, à 10: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 wink)

Dernière modification par johndo (Le 13/04/2010, à 10:22)

Hors ligne