Как удалить случайные n файлы из каталога?

У меня есть каталог загрузок, и я хочу удалить случайные 1 000 изображений из него. Как я могу сделать это с командой?

Я могу удалить единственный с rm но это оснащает долго.. Там какой-либо путь состоит в том, чтобы увеличить объем, удаляют на человечности?

2
задан 3 October 2018 в 14:41

1 ответ

find /uploads -maxdepth 1 -type f -name "*.jpg" -print0 | \
        head -z -n 1000 | xargs -0 rm

find команда находит любые файлы (-type f) именованный *.jpg (-name "*.jpg") в каталоге /uploads и НЕ рекурсивно вызывает в подкаталоги (-maxdepth 1) (который это обычно делает). Это затем печатает имена файлов с \0 как промежуток разделителя. Это необходимо, поскольку имена файлов могли бы содержать странные символы (как пробелы и такой).

Тот вывод питается в head команда. Это читает первые 1 000 "строк" (-n 1000) которые разделяются \0 (-z).

В конечном счете эти 1 000 "строк" (=filenames) питаются в xargs который также ожидает, что "строки" будут разделены \0 (-0) и затем выполняется rm со всеми теми 1 000 строк как параметры.


Если Вы просто хотите предварительно просмотреть результат, изменить команду на

find /uploads -maxdepth 1 -type f -name "*.jpg" -print0 | \
    head -z -n 1000 | xargs -0 echo rm

т.е. замена xargs … rm с xargs … echo rm. Возможно, также замена 1000 с 10 для предварительного просмотра.


Отказ от ответственности: Я не знаю как файлы, распечатанные find отсортированы, но по крайней мере это не некоторый очевидный атрибут (как имя или возраст) и выглядит случайным. Если бы Вы действительно хотите выбрать 1 000 случайных файлов, необходимо было бы вставить a sort -R к виду случайным образом (снова с -z для \0 разделитель):

find /uploads -maxdepth 1 -type f -name "*.jpg" -print0 | \
    sort -z -R | head -z -n 1000 | xargs -0 rm
3
ответ дан 2 December 2019 в 02:41

Другие вопросы по тегам:

Похожие вопросы: