Итак, я получил каталог, заполненный другими каталогами, и мне было интересно, можно ли удалить файлы без размера. Обычно эти файлы имеют размер 0 байт, и, поскольку я хочу объединить все эти подкаталоги, я мог бы заменить совершенно правильный файл на невесомый 0-байтовый файл, и вот мой собственный файл. Любой способ удалить файлы с нулевым байтом?
command-line
files
user245115
источник
источник
-empty
вместо-size 0b
.Найти и удалить все файлы размером 0 рекурсивно:
Пример:
источник
Вы также можете сделать это прямо в оболочке. Это может быть полезно, если вы не хотите удалять пустые скрытые файлы (те, чье имя начинается с a
.
). Хотя вы можете сделать это и сfind
другим, альтернативой будет использование самой оболочки:объяснение
shopt -s globstar
: включает опцию globstar для bash, которая**
сопоставляет одну или несколько подкаталогов.**/*
будет соответствовать всем файлам и каталогам в текущем каталоге и всех его подкаталогах.for file in **/*; do ...; done
: перебрать все найденные файлы и каталоги;[ ! -s "$file" ]
:[ -s "$file" ]
true, если файл существует и не пуст. Следовательно,[ ! -s "$file" ]
(!
инвертирует тест) верно, если файл не существует или если он пустой.[ -f "$file" ]
: true, если файл является обычным файлом. Не каталог, не файл устройства, не символическая ссылка и т. Д.rm "$file"
: удалить файл.&&
Убедитесь , что следующая команда выполняется , только если предыдущий был успешным , так это будет только удалить пустые, обычные файлы.источник
Хотя большинство ответов выше верны, посмотрите на эту команду:
хотя вы можете запустить эту команду:
это удалит все пустые файлы.
Вы можете посмотреть эти файлы перед удалением:
источник
-type f
,-empty
также удалит пустые каталоги. Только что проверил справочную страницу.