Linux удалить файл размером 0

Как удалить определенный файл в Linux, если его размер равен 0. Я хочу выполнить это в crontab без каких-либо дополнительных script.

l filename.file | grep 5th-tab | not eq 0 | rm

Что-то вроде этого?

Ответ 1

Это приведет к удалению всех файлов в каталоге (и ниже), размер которого равен нулю.

find /tmp -size  0 -print0 |xargs -0 rm

Если вам нужен конкретный файл,

if [ ! -s /tmp/foo ] ; then
  rm /tmp/foo
fi

Ответ 2

вы хотели бы использовать find:

 find . -size 0 -delete

Ответ 3

Поиск и удаление пустых файлов в текущем каталоге и подкаталогах:

find . -type f -empty -delete

-type f необходимо, так как также каталоги отмечены как нулевые.


Точка . (текущий каталог) - это начальный каталог поиска. Если у вас есть поиск GNU (например, не Mac OS), вы можете опустить его в этом случае:

find -type f -empty -delete

От Документация GNU find:

Если файлы для поиска не указаны, используется текущий каталог (.).

Ответ 4

Для этого вы можете использовать команду find. Мы можем сопоставлять файлы с помощью -type f и сопоставлять пустые файлы с помощью -size 0. Затем мы можем удалить совпадения с помощью -delete.

find . -type f -size 0 -delete

Ответ 5

Это работает для простой BSD, поэтому он должен быть универсально совместим со всеми вкусами. Ниже, например, в pwd (.)

find . -size 0 |  xargs rm

Ответ 6

В Linux команда stat (1) полезна, когда вам не нужно найти (1):

(( $(stat -c %s "$filename") )) || rm "$filename"

Команда stat здесь позволяет нам просто получить размер файла, что -c %s (см. man-страницы для других форматов). Я запускаю программу stat и фиксирую ее вывод, что $( ). Этот результат показан численно, что внешний (( )). Если для размера указан ноль, то это FALSE, поэтому выполняется вторая часть OR. Без нуля (непустой файл) будет TRUE, поэтому rm не будет выполнен.

Ответ 7

Для нерекурсивного удаления (с использованием du и awk):

rm `du * | awk '$1 == "0" {print $2}'`

Ответ 8

find . -type f -empty -exec rm -f {} \;