¿Cómo puedo ejecutar un determinado comando para cada archivo/carpeta en la carpeta actual?Ejecutar comando para cada archivo en el directorio actual
Comencé con esto como un script base, pero parece que solo funciona cuando uso archivos temporales, y realmente no me gusta el ideea. ¿Hay alguna otra manera?
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";
Para cualquier persona interesada, quería hacer una lista de carpetas, ordenados por su tamaño. Aquí está el resultado 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||";
que conduce a du -sb $FOLDER/* | sort -n | sed "s#^[0-9]*##" | sed "s#^[^\./]*##" | xargs -L 1 du -sh | sed "s|$FOLDER||";
Son directorios. No carpetas ;) –
Ver mi respuesta [aquí] (http: // serverfault.com/q/62411/1293 # 62522) para una forma de hacerlo llamando 'du' solo una vez en lugar de * dos veces para cada archivo *. No necesitarás un bucle 'for'. Puede agregar '--max-depth = 1' al' du' si es necesario y puede agregar su 'sed 's | $ FOLDER ||" '. –
@Dennis Williamson: buena respuesta, no busqué 'awk'. – Quamis