С zsh
:
isascii() [[ $(file -b --mime-encoding - < ${1-$REPLY}) = us-ascii ]]
zmodload zsh/stat
zstat -n +size -- **/*(D.L+1+isascii)
Разбито:
** / *
рекурсивное подстановка, функция, представленная zsh в начале 90-х и позже скопированная некоторыми другими оболочками например ksh93
, fish
, bash
, yash
и tcsh
. (...)
, квалификатор glob : еще одна функция 90-х, но все еще уникальная для zsh
на сегодняшний день. Позволяет дополнительно указать, какие файлы будут включены в глобус на основе метаданных файла, или изменить развернутое значение. Здесь:
D
: включить D из (скрытых) файлов .
: включать только обычные файлы L + 1
: беспокоиться только о файлах размером более 1 байта (иначе файл
ничего о них вам не скажет) + isascii
: вызывает команду isascii
для каждого совпадающего файла, чтобы решить, включать ли этот файл. isascii
определяется как функция, которая вызывает файл
в $ REPLY
(именно так имена файлов передаются для функций, вызываемых квалификаторами glob, функции могут изменять его или возвращать другие файлы в массиве $ reply
). Мы используем здесь $ {1- $ REPLY}
, поэтому мы также можем использовать эту функцию для файла, указанного в качестве аргумента, и не изменять $ REPLY
, просто возвращаем решение через статус выхода.
С -b
и - mime-encoding
, файл
(по крайней мере, реализация из libmagic
) выводит только предполагаемые кодирование.Это намного надежнее, чем вызов grep ASCII
на выходе файла the-file
,
поскольку ASCII
может встречаться там в путь к файлу или другая информация, извлеченная из файла.
Deberías echar un vistazo a bup
Very efficient backup system based on the git packfile format, providing fast incremental saves and global deduplication (among and within files, including virtual machine images).
bup admite bup -fsck(con par2)
verify or repair a bup repository
Вот еще один более облегченный вариант (от меня):
https://github.com/laktak/chkbit-py
Он создает хэши, чтобы вы могли проверить целостность данных на основном и резервном носителе.