Как найти все файлы с нулевым байтом в каталоге, включая подкаталоги
Как найти все файлы с нулевым байтом в каталоге и даже в подкаталогах?
Я сделал это:
#!/bin/bash
lns=`vdir -R *.* $dir| awk '{print $8"\t"$5}'`
temp=""
for file in $lns
do
if test $file = "0"
then
printf $temp"\t"$file"\n"
fi
temp=$file
done
но я получаю только результаты в этом файле каталога не всех файлов
и если какое-либо имя файла имеет пробел, тогда я получаю только первое слово, за которым следует вкладка
Кто-нибудь может мне помочь?
Ответы
Ответ 1
Чтобы напечатать имена всех файлов в и ниже $dir размера 0:
find "$dir" -size 0
Обратите внимание, что не все реализации find
будут выдавать выходные данные по умолчанию, поэтому вам может понадобиться сделать:
find "$dir" -size 0 -print
Ответ 2
В дополнение к ответам выше:
Если вы хотите удалить эти файлы
find $dir -size 0 -type f -delete
Ответ 3
Нет, вам не нужно беспокоиться о grep.
find $dir -size 0 ! -name "*.xml"
Ответ 4
Bash 4+ проверено - это правильный способ поиска размера 0:
find /path/to/dir -size 0 -type f -name "*.xml"
Поиск нескольких расширений файлов размером 0:
find /path/to/dir -size 0 -type f \( -iname \*.css -o -iname \*.js \)
Примечание. Если вы удалите \(... \), результатом будут все файлы, которые удовлетворяют этому требованию, следовательно, игнорируя размер 0.