Ich versuche, die Dateigröße in einem für Menschen lesbaren Format mit dem folgenden Befehl "find" anzuzeigen
find $BASE_DIR/ -user $USER -size +$LOWERSIZELIMIT -mtime +$MY_MTIME -type f -printf "%s %p\n" 2> /dev/null |
sort -nr |
head -n $NUMFILES >> $TESTFILE
So sieht meine Funktion zum Auffinden großer Dateien aus. Es wird $ 1 als Argument verwendet, um den Basisverzeichnispfad an den Befehl find zu übergeben.
function find_files {
#echo "In find files"
# $1 = base directory from where to start the search
find $1/ -user $USER -size +$LOWERSIZELIMIT -mtime +$MY_MTIME -type f -printf "%s %p\n" 2> /dev/null | sort -nr | head -n $NUMFILES >> $TESTFILE
if [[ -s $TESTFILE ]] ;
then
echo "***********************************************************************" >> $DUMPFILE
echo "***********************************************************************" >> $DUMPFILE
echo "***********************************************************************" >> $DUMPFILE
echo "***********************************************************************" >> $DUMPFILE
#cat $TESTFILE
cat $TESTFILE >> $DUMPFILE
rm $TESTFILE
return 0
else
return 1
fi
}
$BASE_DIR/
und$1/
brauche keine abschließenden Schrägstriche, aber sie sollten wirklich in Anführungszeichen stehen, wie in:find "$1" -user …
Antworten:
Verwenden Sie die Option -exec für find (vergessen Sie nicht, mit \; zu enden). Wenn Sie nur einen Teil der Informationen aus Ihrem exec-Befehl benötigen, analysieren Sie mit awk.
Verwenden Sie einen anderen Befehl, wenn Sie keine von Menschen lesbare Ausgabe von ls wünschen oder wenn Sie dies so tun möchten
Die schwierigsten Teile von find's exec verwenden {} als Ergebniselement für das, was gefunden wird, und der Befehl muss mit \ enden. Wenn Sie eine Befehlskette in derselben Zeile haben, die durch; Sie müssen Ihren Suchvorgang beenden und dann ein; hinzufügen. es gibt also 2, wie ein Befehl; find $ BASE_DIR / -user $ USER -size + $ LOWERSIZELIMIT -mtime + $ MY_MTIME -type f -exec / bin / ls -hl {} \ ;; irgendein Befehl;
quelle
\;
" , dass-exec ... +
(undxargs ...
) viel schneller ist als-exec ... \;
. (Testen Sie sich mit demtime
Befehl, oder sehen Sie sich einen anderen Test an .)Die Subtilität ist hier das
sort
, kann man nicht (leicht und korrekt) sortieren Menschen lesbaren Zahlen (es sei denn , Sie habensort
von GNU coreutils > = 7.5, unterstützt eine-h
Option, zum Beispieldu -h | sort -h
).Speichern Sie Folgendes in
hr.awk
:Dann können Sie tun:
Das Gawk-Skript akzeptiert
find ... -printf "%s %p\n"
Eingaben und konvertiert das erste Feld in eine für Menschen lesbare Größe mit Suffix (in IEC 2 10- Einheiten).Siehe auch diese beliebte Frage: https://serverfault.com/questions/62411/how-can-i-sort-du-h-output-by-size
quelle