Как получить все файлы, превышающие определенный размер, и удалить их - PullRequest
23 голосов
/ 20 февраля 2011
  1. Я ищу команду Linux для получить все файлы, превышающие определенный размер от текущего каталог и его подкаталоги.

  2. Какой самый простой способ удалить все эти файлы?

Ответы [ 4 ]

55 голосов
/ 20 февраля 2011

Аналогичен ответу exec rm, но не требует процесса для каждого найденного файла:

find . -size +100k -delete
14 голосов
/ 20 февраля 2011

Однострочник:

find . -size +100k -exec rm {} \;

Первая часть (find . -size +100k) ищет все файлы, начиная с текущего каталога (.), превышающего (+) 100 кБайт (100k)).

Вторая часть (-exec rm {} \;) вызывала данную команду для каждого найденного файла.{} является заполнителем для текущего имени файла, включая путь.\; просто отмечает конец команды.

Не забудьте всегда проверять правильность критериев фильтрации, запустив raw find:

find . -size +100k

Или перед удалением вы можете даже сделать резервную копию:

find . -size +100k -exec cp --parents {} ~/backup \;
1 голос
/ 20 февраля 2011

В зш :

ls -l *(Lk+100)   # list file size greater than 100kb

так:

rm *(Lk+100)

Больше зш совершенства здесь .

0 голосов
/ 23 декабря 2017

Python установлен на всех ОС Unix, так почему бы не использовать его вместо Bash?

Я всегда нахожу Python более читабельным, чем awk и sed magic.

Это код Python, который я написал бы:

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

...