Bash Рукописный шрифт - How хан I get the size of directories in .txt file and save them into other file?

I started в few weeks with Linux bash programming, but гm struggling with в problem: How хан I get the size of многообразный directories (path saved on в .txt file) and then, write into another file, the directory path, followed by size and the общее количество size occupied by that directories. I already tried this, but гm not sure:

totsize=0
while read -r diretory; do
   size=$(du -ch "$directory")
   echo "$diretory size: $size" > "$homedir/$filename2"
   $totsize += $(du -c "$homedir/$diretorio")
done < "$homedir/diretories.txt"
sudo echo "total size: $totsize" >> "$homedir/$filename2"

Thanks in advance (and sorry for bad english)

3
задан 17 October 2015 в 14:39

3 ответа

Используйте find в сочетании с du и перенаправьте в файл с >

sudo find /path/to/topDir -maxdepth 1 -type d  -exec du -sh {} \;  > output.txt

Пример:

xieerqi:$ sudo find Desktop -maxdepth 1 -type d  -exec du -sh {} \; > outputFile1.txt                                                            
[sudo] password for xieerqi: 

xieerqi:$ cat outputFile1.txt                                                                                                                    
2.7G    Desktop
69M Desktop/linux-kernel-4.1.0
1.1M    Desktop/DOCS
6.8M    Desktop/The comments that became a reporter’s death sentence | New York Post_files
4.0K    Desktop/newdir
6.7M    Desktop/IMAGES
12M Desktop/TIRES
504K    Desktop/MSU-TEMPLATES
341M    Desktop/PDFS
19M Desktop/java

Чтобы эта команда давала использование диска для определенных каталогов Из списка можно объединить команды cat и xargs с помощью приведенной выше команды. Например,

 cat dirList.txt | xargs -I dir sudo find dir -maxdepth 0 -type d  -exec du -sh {} \; 

Для некоторых каталогов, владельцем которых вы не являетесь, требуется sudo доступ для просмотра списка их использования диска, поэтому объедините их с sudo sh -c. Позвольте мне продемонстрировать,

xieerqi:$ sudo sh -c "cat dirList.txt | xargs -I dir find dir -maxdepth 0 -type d  -exec du -sh {} \+"                                           
[sudo] password for xieerqi: 
2.7G    /home/xieerqi/Desktop
11M /bin
5.5G    /usr

xieerqi:$ cat dirList.txt                                                                                                                        
/home/xieerqi/Desktop
/bin
/usr
1
ответ дан 1 December 2019 в 15:37

Вы можете получить размер справочников с du команда как это:

du -h -d 1 "path to parent directory"

-d: глубина подкаталогов

1
ответ дан 1 December 2019 в 15:37

Имея дело с файлами или папками их именем, я настоятельно рекомендую иметь дело с ними отделенный nullbyte характером, не newline. Поскольку официально имя файла может содержать newline. Таким образом, Вы не должны составлять список справочников, отделенных newline.

Так или иначе, когда у Вас есть этот список, Вы можете просто использовать это:

du -sch --files0-from=dirs.txt
  • -s похож -d0 и будет только суммировать общее количество для каждого аргумента.
  • -c вычисляет общую сумму.
  • -h делает это все в человекочитаемом формате.
  • --files0-from=dirs.txt читает filenames/directorynames из данного файла, законченного nullbyte.
<час>

С Вашим списком, это было бы похоже (но с ловушкой имен файлов с newlines в нем):

tr '\n' '\0' <dirs.txt | du -sch --files0-from=-
3
ответ дан 1 December 2019 в 15:37

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

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