-
Я ищу команду linux для получить все файлы, превышающие определенный размер от текущего каталог и его подкаталоги.
-
Самый простой способ удалить все эти файлы?
Как получить все файлы, превышающие определенный размер, и удалить их
Ответ 1
Подобно запросу exec rm, но не нужен процесс для каждого найденного файла:
find . -size +100k -delete
Ответ 2
Однострочник:
find . -size +100k -exec rm {} \;
Первая часть (find . -size +100k
) ищет все файлы, начиная с текущего каталога (.
), превышающего (+
) 100 кбайт (100k
).
Вторая часть (-exec rm {} \;
) вызывается данной командой для каждого найденного файла. {}
является заполнителем для текущего имени файла, включая путь. \;
просто отмечает конец команды.
Не забудьте всегда проверять правильность критериев фильтрации, запустив raw find
:
find . -size +100k
Или вы можете сделать резервную копию перед удалением:
find . -size +100k -exec cp --parents {} ~/backup \;
Ответ 3
В zsh:
ls -l *(Lk+100) # list file size greater than 100kb
так:
rm *(Lk+100)
Подробнее zsh goodness здесь.
Ответ 4
python установлен на всех ОС на основе UNIX, поэтому почему бы не использовать его вместо bash?
Я всегда нахожу python более читаемым, чем awk
и sed
magic.
Это код питона, который я бы написал:
import os
Kb = 1024 # Kilo byte is 1024 bytes
Mb = kb*kb
Gb = kb*kb*kb
for f in os.listdir("."):
if os.stat(f).st_size>100*Kb:
os.remove(f)
И это однострочный вариант с python -c
python -c "import os; [os.remove(f) for f in os.listdir('.') if os.stat(f).st_size>100*1024]"
И если вы хотите применить поиск рекурсивно, см. this