Если вы просто хотите перечислить 0-байтовые файлы, вы можете использовать find
:
Пример использования find
:
$ find . -type f -size 0b
./4.txt
./5.txt
./6.txt
Преимущество использования find
заключается в том, что вы можете легко передать его в xargs
чтобы сделать с файлами то, что вам нужно (например, удалить их), что гораздо проще, чем использовать цикл for
.
Если вы хотите что-то сделать с этими файлами после их поиска, например, удалив все 0-байтовые файлы (учитывая странные имена файлов), я бы сделал что-то вроде этого:
$ find -type f -size 0b -print0 | xargs -0I file rm -v file
removed ‘./4.txt’
removed ‘./5.txt’
removed ‘./6.txt’
Кроме того, другой вариант, чтобы просто перечислить все файлы в каталоге вместе с размером файла в удобочитаемом формате, использовать du -h
.
Пример использования du
:
$ du -h *
1.0K 1.txt
1.0K 2.txt
1.0K 3.txt
0 4.txt
0 5.txt
0 6.txt
РЕДАКТИРОВАТЬ: Пока вы знаете, как найти пустые файлы, вы можете выполнять дополнительные операции несколькими способами. Следующий пример, возможно, не лучший способ сделать это, но если вы абсолютно ищете оператор if/else
, то вы можете сделать что-то вроде этого:
#!/bin/bash
for i in *; do
if [[ $(du -h "$i" | awk '{print $1}') = 0 ]]; then
echo "$i is empty."
else
echo "$i is not empty."
fi
done
Возвращает:
1.txt is not empty.
2.txt is not empty.
3.txt is not empty.
4.txt is empty.
5.txt is empty.
6.txt is empty.