Как мне удалить определенный файл в Linux, если его размер равен 0. Я хочу выполнить это в crontab без дополнительного скрипта.
l filename.file | grep 5th-tab | not eq 0 | rm
Что-то вроде этого?
Как мне удалить определенный файл в Linux, если его размер равен 0. Я хочу выполнить это в crontab без дополнительного скрипта.
l filename.file | grep 5th-tab | not eq 0 | rm
Что-то вроде этого?
Это удалит все файлы в каталоге (и ниже), которые имеют нулевой размер.
find /tmp -size 0 -print -delete
Если вам просто нужен определенный файл;
if [ ! -s /tmp/foo ] ; then
rm /tmp/foo
fi
[ -s /tmp/foo ] || rm /tmp/foo
(проверьте, если размер равен нулю, иначе удалите). Также обратите внимание, что xargs
небезопасно, если имена файлов/каталогов содержат пробелы; find ... -exec rm '{}' \;
в такой ситуации безопасен.
- person FrankH.; 13.05.2011
xargs
. '-print0` и xargs -0
исправляют пробелы.
- person Paul Tomblin; 13.05.2011
find -exec
, всегда отдавайте предпочтение +
;
в тех случаях, когда вы можете (и это один из таких случаев).
- person Chris Jester-Young; 11.06.2011
rm --
(обратите внимание на конечные символы --
) быть здесь безопаснее, чем просто rm
для предотвращения мошеннических имен файлов? serverfault.com/questions/337082 /
- person OnlineCop; 27.10.2015
find /tmp -size 0 -print0 |xargs -0 echo rm
- person Paul Tomblin; 22.04.2018
-delete
?
- person Ruslan; 04.04.2019
-delete
новый, а моя версия работает со всеми версиями find
, выпущенными за последние 40 лет.
- person Paul Tomblin; 04.04.2019
-print0
40 лет и он вездесущ?
- person Ruslan; 04.04.2019
вы можете использовать find:
find . -size 0 -delete
-empty
:-)
- person lilydjwg; 20.03.2016
find . -empty -delete
будет самым крутым. :-)
- person Anne van Rossum; 19.10.2016
-maxdepth 1
для текущей папки.
- person aloisdg; 02.02.2017
Для этого вы можете использовать команду find
. Мы можем сопоставлять файлы с помощью -type f
и сопоставлять пустые файлы с помощью -size 0
. Затем мы можем удалить совпадения с -delete
.
find . -type f -size 0 -delete
В Linux команда stat(1) полезна, когда вам не нужен find(1):
(( $(stat -c %s "$filename") )) || rm "$filename"
Команда stat здесь позволяет нам просто получить размер файла, это -c %s
(см. справочные страницы для других форматов). Я запускаю программу статистики и фиксирую ее вывод, это $( )
. Этот вывод виден в числовом виде, это внешний (( ))
. Если для размера задан ноль, это ЛОЖЬ, поэтому выполняется вторая часть операции ИЛИ. Ненулевое значение (непустой файл) будет TRUE, поэтому rm не будет выполняться.
Это работает для простой BSD, поэтому она должна быть универсально совместима со всеми разновидностями. Ниже, например, в pwd
( .
)
find . -size 0 | xargs rm
-delete
? freebsd.org/cgi/man.cgi?find(1)
- person Antonio; 17.03.2017
Для нерекурсивного удаления (с использованием du и awk):
rm `du * | awk '$1 == "0" {print $2}'`
find . -name '*.txt' -type f -empty -delete
- person jspek; 18.04.2019
! -s
- это то, что мне было нужно, и в этом вопросе об этом не упоминается. - person Boris   schedule 07.01.2021