Как удалить определенный файл в Linux, если его размер равен 0. Я хочу выполнить это в crontab без каких-либо дополнительных script.
l filename.file | grep 5th-tab | not eq 0 | rm
Что-то вроде этого?
Как удалить определенный файл в Linux, если его размер равен 0. Я хочу выполнить это в crontab без каких-либо дополнительных script.
l filename.file | grep 5th-tab | not eq 0 | rm
Что-то вроде этого?
Это приведет к удалению всех файлов в каталоге (и ниже), размер которого равен нулю.
find /tmp -size 0 -print0 |xargs -0 rm
Если вам нужен конкретный файл,
if [ ! -s /tmp/foo ] ; then
rm /tmp/foo
fi
вы хотели бы использовать find:
find . -size 0 -delete
Поиск и удаление пустых файлов в текущем каталоге и подкаталогах:
find . -type f -empty -delete
-type f необходимо, так как также каталоги отмечены как нулевые.
Точка . (текущий каталог) - это начальный каталог поиска. Если у вас есть поиск GNU (например, не Mac OS), вы можете опустить его в этом случае:
find -type f -empty -delete
Если файлы для поиска не указаны, используется текущий каталог (.).
Для этого вы можете использовать команду find. Мы можем сопоставлять файлы с помощью -type f и сопоставлять пустые файлы с помощью -size 0. Затем мы можем удалить совпадения с помощью -delete.
find . -type f -size 0 -delete
Это работает для простой BSD, поэтому он должен быть универсально совместим со всеми вкусами. Ниже, например, в pwd (.)
find . -size 0 | xargs rm
В Linux команда stat (1) полезна, когда вам не нужно найти (1):
(( $(stat -c %s "$filename") )) || rm "$filename"
Команда stat здесь позволяет нам просто получить размер файла, что -c %s (см. man-страницы для других форматов). Я запускаю программу stat и фиксирую ее вывод, что $( ). Этот результат показан численно, что внешний (( )). Если для размера указан ноль, то это FALSE, поэтому выполняется вторая часть OR. Без нуля (непустой файл) будет TRUE, поэтому rm не будет выполнен.
Для нерекурсивного удаления (с использованием du и awk):
rm `du * | awk '$1 == "0" {print $2}'`
find . -type f -empty -exec rm -f {} \;