Comment puis-je exécuter une certaine commande pour chaque fichier/dossier du dossier en cours?Exécuter la commande pour chaque fichier du répertoire en cours
J'ai commencé avec ceci en tant que script de base, mais cela semble fonctionner uniquement lorsque j'utilise des fichiers temporaires, et je n'aime pas vraiment l'idée. Est-ce qu'il y a un autre moyen?
FOLDER=".";
DIRS=`ls -1 "$FOLDER">/tmp/DIRS`;
echo >"/tmp/DIRS1";
while read line ; do
SIZE=`du "$FOLDER$line"`;
echo $SIZE>>"/tmp/DIRS1";
done < "/tmp/DIRS";
Pour toute personne intéressée, je voulais faire une liste de dossiers, classés par leur taille. Voici le résultat final
FOLDER="$1";
for f in $FOLDER/*; do
du -sb "$f";
done | sort -n | sed "s#^[0-9]*##" | sed "s#^[^\./]*##" | xargs -L 1 du -sh | sed "s|$FOLDER||";
qui conduit à du -sb $FOLDER/* | sort -n | sed "s#^[0-9]*##" | sed "s#^[^\./]*##" | xargs -L 1 du -sh | sed "s|$FOLDER||";
Ce sont des répertoires. Pas de dossiers. ;) –
Voir ma réponse [ici] (http: // serverfault.com/q/62411/1293 # 62522) pour un moyen de le faire en appelant 'du' une seule fois au lieu de * deux fois pour chaque fichier *. Vous n'aurez pas besoin d'une boucle 'for'. Vous pouvez ajouter '--max-depth = 1' au' du' dedans si cela est nécessaire et vous pouvez ajouter votre 'sed 's | $ FOLDER ||" '. –
@Dennis Williamson: bonne réponse, n'a pas pensé à se pencher sur 'awk'. – Quamis