2016-03-19 4 views
1

Я попытался напечатать самый большой файл в каталоге, но я не могу объяснить, почему я получаю 768 вместо 726491. $ DIR - это каталог, а $ ext - расширение файла. Мой скрипт должен работать в тире.Самый большой файл

find "${DIR}" -type f -name "*.$ext" -exec du -a {} + | 
sort -n -r | head -n 1 | cut -f1 

768  ./subfolder/test.jpg 

-rw-r--r-- 1 username vti 726491 19 mar 12:46 test.jpg 
drwxr-xr-x 2 username vti  512 19 mar 12:46 subsubfolder 
drwxr-xr-x 3 username vti  512 19 mar 12:46 . 
drwxr-xr-x 4 username vti  512 19 mar 12:46 .. 

ответ

0

du, с использованием шоу-диска по умолчанию в качестве размера блока (1024 байт/512 байт), а не в байтах.

Если вы хотите du печатать bytes, вам необходимо указать -b (или --bytes) вариант:

find "${DIR}" -type f -name "*.$ext" -exec du -a -b {} + | .. 
               ^^ 

Accoridng к DU(1):

--apparent-size 
      print apparent sizes, rather than disk usage; although the 
      apparent size is usually smaller, it may be larger due to holes 
      in ('sparse') files, internal fragmentation, indirect blocks, 
      and the like 

    -B, --block-size=SIZE 
      scale sizes by SIZE before printing them; e.g., '-BM' prints 
      sizes in units of 1,048,576 bytes; see SIZE format below 

    -b, --bytes 
      equivalent to '--apparent-size --block-size=1' 

UPDATE

В системе, где -b опция не поддерживается, используйте -B 1 вариант вместо:

find "${DIR}" -type f -name "*.$ext" -exec du -a -B 1 {} + | .. 

UPDATE2 В FreeBSD, вам необходимо указать -A параметр, чтобы отобразить видимый размер.

+0

Я не знаю, я получаю эту ошибку. du: незаконный вариант - b использование: du [-Aclnx] [-H | -L | -P] [-g | -h | -k | -m] [-a | -s | -d depth] [-B blocksize] [-I mask] [-t threshold] [file ...] Самый большой файл .hiden: – user3463055

+0

@ user3463055, Кажется, что 'du' в вашей системе не поддерживает' -b '. Затем попробуйте использовать '-B 1'. Я просто обновил ответ соответственно. Спасибо за ваш отзыв. – falsetru

+0

Ну, теперь он не показывает ошибку, но он по-прежнему показывает 768 вместо 726491. На моем компьютере сейчас находится KornShell. – user3463055

Смежные вопросы