Скрипт Bash — как получить размер каталогов в файле .txt и сохранить их в другом файле?

Скрипт Bash — как получить размер каталогов в файле .txt и сохранить их в другом файле?

Я начал несколько недель с программирования Linux bash, но я борюсь с проблемой: как мне получить размер нескольких каталогов (путь сохранен в файле .txt), а затем записать в другой файл путь к каталогу, затем размер и общий размер, занимаемый этими каталогами. Я уже пробовал это, но я не уверен:

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"

Спасибо заранее (и извините за плохой английский)

решение1

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

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

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

С вашим списком это будет выглядеть так (но с учетом подводного камня в виде имен файлов с символами новой строки):

tr '\n' '\0' <dirs.txt | du -sch --files0-from=-

решение2

Использовать 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

решение3

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

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

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

Связанный контент