Считайте все файлы в папке и подпапках - прогресс и размер

Причиной, почему это не работает автоматический ATOW, является известная ошибка удара, которая предотвращает переменные типа массив экспорта (см. ошибки раздела в странице справочника). К сожалению, DIRSTACK является переменной типа массив.

Я создал замены для pushd/popd/dirs, которые переносят их, но хранят их материал в скалярной переменной, так, чтобы дочерние процессы знали о нем.

Если Вы будете получать код ниже и будете использовать mypushd/mypopd/mydirs вместо оригиналов, то дочерние процессы будут помнить стопку своих родителей. Заметьте, что это не будет работать с каталогами, имя которых включает двоеточие!

Предупредите меня при определении какой-либо ошибки потому что я просто записал это. Кроме того, если Вы знаете о более простой альтернативе, совместно используйте!

export SCALARDIRSTACK
export DIRSTACK

update_dirstack()
{
  if [ ! -z "$SCALARDIRSTACK" ]; then
    dirs -c
    # get an array from scalardirstack
    IFS=':' read -a tmp <<< "$SCALARDIRSTACK"
    # traverse in reverse order to pushd stuff into the stack
    for (( idx=${#tmp[@]}-1 ; idx>=0 ; idx-- )) ; do
      # gotta use pushd/popd this to manipulate DIRSTACK
      pushd -n ${tmp[idx]} > /dev/null
    done
  fi
}

update_scalardirstack()
{
  if [ ${#DIRSTACK[@]} -gt 1 ]; then
    SCALARDIRSTACK=$(printf '%q:' ${DIRSTACK[@]:1}) # string from array
  else
    SCALARDIRSTACK=""
  fi
}

scalar_dstack_wrap()
{
  update_dirstack
  $@
  update_scalardirstack
}

alias mydirs='scalar_dstack_wrap dirs'
alias mypushd='scalar_dstack_wrap pushd'
alias mypopd='scalar_dstack_wrap popd'
3
02.06.2014, 01:50
2 ответа

Не уверен, что полностью понял ваш вопрос, но что насчет:

find . -type f -exec pv -N {} {} \; > /dev/null

Дает вывод типа:

  ./file1:  575kB 0:00:00 [1.71GB/s] [=======================>] 100%
  ./file2: 15.2GB 0:00:07 [2.22GB/s] [==>                      ] 15% ETA 0:00:38
5
27.01.2020, 21:16

Вместо использования cp и find для этой задачи вы можете подумать об использовании rsync .

Пример

$ time rsync -avvz -O --stats --checksum --human-readable \
    --acls --itemize-changes --progress \
    --out-format='[%t] [%i] (Last Modified: %M) (bytes: %-10l) %-100n' \
    "<fromDir>" "<toDir>" | tee /path/to/log.txt

Пример

Будет создан отчет, который выглядит следующим образом.

команда

$ time rsync -avvz -O --stats --checksum --human-readable --acls --itemize-changes --progress --out-format='[%t] [%i] (Last Modified: %M) (bytes: %-10l) %-100n' "How_to_Write_Shared_Libraries" "/home/saml/newdir/." | tee ~/rsync.txt

подробные сведения о каждом переданном файле

sending incremental file list
delta-transmission disabled for local transfer or --whole-file
[2014/05/31 15:12:34] [cd+++++++++] (Last Modified: 2014/02/21-15:42:44) (bytes: 4096      ) How_to_Write_Shared_Libraries/                                                                      
[2014/05/31 15:12:34] [>f+++++++++] (Last Modified: 2013/12/06-19:59:22) (bytes: 766590    ) How_to_Write_Shared_Libraries/dsohowto.pdf                                                          
     766.59K 100%   20.00MB/s    0:00:00 (xfer#1, to-check=1/3)
[2014/05/31 15:12:34] [>f+++++++++] (Last Modified: 2014/02/21-15:42:44) (bytes: 44        ) How_to_Write_Shared_Libraries/url.txt                                                               
          44 100%    1.23kB/s    0:00:00 (xfer#2, to-check=0/3)
total: matches=0  hash_hits=0  false_alarms=0 data=766634

статистика о передаче в целом

rsync[5923] (sender) heap statistics:
  arena:        1073152   (bytes from sbrk)
  ordblks:            5   (chunks not in use)
  smblks:             1
  hblks:              2   (chunks from mmap)
  hblkhd:        401408   (bytes from mmap)
  allmem:       1474560   (bytes from sbrk + mmap)
  usmblks:            0
  fsmblks:           96
  uordblks:      410512   (bytes used)
  fordblks:      662640   (bytes free)
  keepcost:      396928   (bytes in releasable chunk)

rsync[5926] (server receiver) heap statistics:
  arena:         286720   (bytes from sbrk)
  ordblks:            2   (chunks not in use)
  smblks:             5
  hblks:              3   (chunks from mmap)
  hblkhd:        667648   (bytes from mmap)
  allmem:        954368   (bytes from sbrk + mmap)
  usmblks:            0
  fsmblks:          384
  uordblks:      180208   (bytes used)
  fordblks:      106512   (bytes free)
  keepcost:      102336   (bytes in releasable chunk)

rsync[5925] (server generator) heap statistics:
  arena:         135168   (bytes from sbrk)
  ordblks:            2   (chunks not in use)
  smblks:             6
  hblks:              2   (chunks from mmap)
  hblkhd:        401408   (bytes from mmap)
  allmem:        536576   (bytes from sbrk + mmap)
  usmblks:            0
  fsmblks:          464
  uordblks:       88688   (bytes used)
  fordblks:       46480   (bytes free)
  keepcost:       32800   (bytes in releasable chunk)

сводная статистика передачи

Number of files: 3
Number of files transferred: 2
Total file size: 766.63K bytes
Total transferred file size: 766.63K bytes
Literal data: 766.63K bytes
Matched data: 0 bytes
File list size: 143
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 667.27K
Total bytes received: 54

sent 667.27K bytes  received 54 bytes  1.33M bytes/sec
total size is 766.63K  speedup is 1.15

время, которое потребовалось

real    0m0.092s
user    0m0.053s
sys     0m0.008s
0
27.01.2020, 21:16

Теги

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