Удаление пустых (нулевых) файлов - PullRequest
7 голосов
/ 13 февраля 2009

Какой самый простой / лучший способ найти и удалить пустые (нулевые байты) файлы, используя только инструменты, встроенные в Mac OS X?

Ответы [ 4 ]

14 голосов
/ 13 февраля 2009

Достаточно просто:

find . -type f -size 0 -exec rm -f '{}' +

Чтобы игнорировать любой файл с содержимым xattr (при условии реализации MacOS find):

find . -type f -size 0 '!' -xattr -exec rm -f '{}' +

При этом обратите внимание, что многие xattrs не особенно полезны (например, com.apple.quarantine существует во всех загруженных файлах).

8 голосов
/ 17 мая 2013

Вы можете уменьшить потенциально большое количество вилок для запуска / bin / rm на:

find . -type f -size 0 -print0 | xargs -0 /bin/rm -f

Вышеприведенная команда является очень переносимой, работает на большинстве версий Unix, а не только на Linux, и на версиях Unix, появившихся в течение десятилетий. Для длинных списков файлов может быть выполнено несколько команд /bin/rm, чтобы не допустить превышения списком ограничения длины командной строки.

Подобный эффект может быть достигнут с меньшим набором текста на более поздних ОС, при использовании + в find для замены наиболее распространенного использования xargs в стиле все еще поддается другим действиям, кроме /bin/rm. В этом случае find будет обрабатывать разбиение действительно длинных списков файлов на отдельные команды /bin/rm. {} обычно цитируется, чтобы не дать оболочке что-либо с ней сделать; кавычки не всегда обязательны, но тонкости цитирования в оболочке слишком сложны, чтобы охватывать их, поэтому в случае сомнений включайте апострофы:

find . -type f -size 0 -exec /bin/rm -f '{}' +

В Linux более короткие подходы обычно доступны с использованием -delete. Обратите внимание, что недавняя первичная find -delete напрямую реализована с помощью unlink (2) и не порождает zillion /bin/rm команд или даже те немногие, которые xargs и + делают. Mac OS find также имеет основные цвета -delete и -empty.

find . -type f -empty -delete

Чтобы растоптать пустые (и недавно освобожденные) файлы, в том числе и каталоги, многие современные хосты Linux могут использовать этот эффективный подход:

find . -empty -delete
1 голос
/ 13 февраля 2009

Использование:

find . -type f -size 0b -exec rm {} ';'

со всеми другими возможными вариантами, чтобы ограничить то, что будет удалено.

1 голос
/ 13 февраля 2009
find /path/to/stuff -empty

Если это список файлов, которые вы ищете, введите команду:

find /path/to/stuff -empty -exec rm {} \;

Будь осторожен! Там не будет никакого способа отменить это!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...