Spero che qualcuno mi corregga se ho fatto qualche cavolata
* Trovare tutti i file col numero dispari di righe (quindi sono i file di testo)
code:
#!/bin/sh
TEMP=temp
echo "Calculating..." & (find / -type f | xargs wc -l 2>/dev/null | sed s/^\ *// > $TEMP)
echo -e "LINES\t\tFILE"
echo "--------------------------------------------"
while read line; do
LC=$(echo $line | cut -f 1 -d " ")
NAME=$(echo $line | cut -f 2 -d " ")
PAIR=$(expr $LC % 2)
if [ $PAIR -ne 0 ]; then
echo - e "$LC\t\t$NAME"
fi
done < $TEMP
rm $TEMP
Ho utilizzato un file temporaneo altrimenti mi andava in "Out of space"....e direi anche giustamente dato che i file trovati da find / sono molti....ma la mia domanda è: è corretto fare in questo modo? Altrimenti ora come ora non saprei come farlo....
Se il find ritornasse pochi file allora avrei potuto anche fare solo un for che ciclava sui risultati del find....ma nel caso del find / questa è l'unica soluzione che mi viene in mente
* Trovare tutti i file di testo che non siano script
code:
#!/bin/sh
TEMP="$(pwd)/temp"
echo "Calculating..." & (find / -type f | grep -v '^'"$TEMP"'$' > $TEMP)
while read line do
FILE=$(echo $line)
if [ "$(head -1 $FILE)" != "#!/bin/sh" ]; then
echo $FILE
fi
done < $TEMP
rm $TEMP
* Trovare tutti i link simbolici nel filesystem
code:
#!/bin/sh
for LINK in $(find / -type l); do
echo $LINK
done
In questo script non è stato necessario utilizzare un file temporaneo perchè tanto i link simbolici che ho trovato sono solo 2.
*Trovare l'utente col minor numero di file nel sistema
code:
#!/bin/sh
echo -e "USER\t\tUID\t\t#FiLES"
echo "-----------------------------------------------"
MINUSER=$(head -1 /etc/passwd | cut -f 1 -d : )
MINUID=$(head -1 /etc/passwd | cut -f 3 -d : )
MINFILES=$(find / -user $MINUID | wc -l)
while read line; do
USER=$(echo $line | cut -f 1 -d : )
UID=$(echo $line | cut -f 3 -d : )
if [ "$UID" -eq "$MINUID" ]; then
echo -e "$MINUSER\t\t$MINUID\t\t$MINFILES"
continue
fi
FILES=$(find / -user $UID | ec -l)
fi [ "$MINFILES" -ge "$FILES" ]; then
MINFILES=$FILES
MINUSER=$USER
MINUID=$UID
fi
echo -e "$USER\t\t$UID\t\t$FILES"
done < /etc/passwd
echo "\nMINORE:\n-----------------------------------------------"
echo -e "$MINUSER\t\t$MINUID\t\t$MINFILES"
In questo esercizio stampo anche tutti gli utenti, i relativi UID e il relativo numero di files così da avere un riscontro col risultato finale (l'utente col minor numero di files)
* Elencare i tre utenti che hanno il maggior numero di file nel sistema
code:
#!/bin/sh
TEMP="$(pwd)/temp"
while read line; do
USER=$(echo $line | cut -f 1 -d : )
UID=$(echo $line | cut -f 3 -d : )
FILES=$(find / -user $UID | wc -l)
echo -e "$FILES $USER" >> $TEMP
done < /etc/passwd
sort -nr $TEMP | head -3
rm $TEMP
Last edited by Spr1gg4N on 07-09-2009 at 10:40
|