Как я могу перечислить все файлы и папки за пределами указанного размера?

В разделе у меня есть несколько файлов и папок, и я могу перечислить все эти размеры файлов с помощью du следующим образом:

du -h

Но как я могу перечислить все файлы, которые выходят за рамки определенного размер дискового пространства, например, 5 МБ?

7
задан 27 December 2012 в 17:15

3 ответа

Вот простое решение в bash, которое анализирует размер файлов и папок:

#!/bin/bash

folder="$1"
limit="$2"

IFS= 

первый параметр - это целевая папка для изучения
второй параметр - это ограничение в килобайтах, где 1K = 1024 байта.

\n' for item in `find "$folder"`; do size=$(du -s "$item" | cut -f1) if [ $size -gt $limit ]; then echo $item fi done

первый параметр - это целевая папка для изучения
второй параметр - это ограничение в килобайтах, где 1K = 1024 байта.

0
ответ дан 27 December 2012 в 17:15

Будьте осторожны: du не печатает размер файла, он дает вам оценку использования файлового пространства.

Вы можете создать файл размером 10 МБ, который использует гораздо меньше:

dd if=/dev/zero of=file seek=10M count=1 bs=1
stat -c %s file
ls -lh file
du -h file
cat file | wc

Примером является сжатый файл, который использует меньше места на диске, чем его размер, как в примере выше разреженный файл .

В приведенном выше примере find . -type f -size +5M выдаст file, даже если du намного меньше, чем 5M.

Если вы знаете, что в именах файлов нет новых строк, вы можете отфильтровать вывод find с помощью:

find . -type f -size +5M | while IFS= read -r file; do
  du=$(du -k "$file")
  size="${du%%$(printf "\t")*}"
  if test $size -gt $((5 * 1024)); then
    echo "$file"
  fi
done

Если в именах ваших файлов могут быть строки, вы можете использовать это расширение GNU. , но затем используйте что-то еще, кроме echo в цикле:

find . -type f -size +5M -print0 | while IFS= read -r -d '' file; do
  du=$(du -k "$file")
  size="${du%%$(printf "\t")*}"
  if test $size -gt $((5 * 1024)); then
    echo "$file"
  fi
done
0
ответ дан 27 December 2012 в 17:15
find /home/stephenm/ -maxdepth 1 -size +20k -exec du -h {} \;

В списке / home / stephenm

должно быть указано что-либо свыше 20 тыс., Чтобы перейти в подкаталоги, опустите опцию -maxdepth 1.

0
ответ дан 27 December 2012 в 17:15

Другие вопросы по тегам:

Похожие вопросы: