У меня есть каталог загрузок, и я хочу удалить случайные 1 000 изображений из него. Как я могу сделать это с командой?
Я могу удалить единственный с rm
но это оснащает долго.. Там какой-либо путь состоит в том, чтобы увеличить объем, удаляют на человечности?
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