Чтобы проверить, содержит ли файл с именем $fname
только шестнадцатеричные нули, попробуйте:
head -c "$(wc -c <"$fname")" /dev/zero | cmp -s - "$fname"
Здесь head -c "$(wc -c <"$fname")" /dev/zero
создает строку из нулевых байтов точно так же, как файл $fname
.cmp -s - "$fname"
сравнивает эту строку шестнадцатеричных нулей с самим файлом.Если они совпадают, то cmp
устанавливает свой код завершения в success (0).
Чтобы вывести все обычные файлы в каталоге, которые содержат только шестнадцатеричные нули:
for fname in ./*
do
[ -f "$fname" ] && head -c "$(wc -c <"$fname")" /dev/zero | cmp -s - "$fname" && echo "$fname"
done
Удалить всеобычные файлы в каталоге, которые содержат только шестнадцатеричные нули, мы просто заменяем echo
на rm
:
for fname in ./*
do
[ -f "$fname" ] && head -c "$(wc -c <"$fname")" /dev/zero | cmp -s - "$fname" && rm "$fname"
done
Здесь [ -f "$fname" ]
проверяет, является ли файл обычным файлом, а не каталогом,head -c "$(wc -c <"$fname")" /dev/zero | cmp -s - "$fname"
проверяет, содержит ли файл только шестнадцатеричные нули.Если cmp
retursn success, rm "$fname"
удаляет этот файл.