Я хотел бы сократить большую базу данных из командной строки до N файлов, очень похоже на этот вопрос. Единственное отличие состоит в том, что большинство моих файлов находятся в подкаталогах, поэтому мне было интересно, было ли быстрое решение моей проблемы или потребовалось бы более глубокое действие. В настоящее время моя команда выглядит так (с заменой (N+1) на соответствующий номер):
find . -type f | sort -R | tail -n +(N+1) | xargs rm
Первоначально я думал, что это будет работать, потому что поиск по своей природе является рекурсивным, а затем я попытался добавить -r (рекурсивный флаг) вокруг rm поскольку вывод указывает, что он выбирает файлы случайным образом, но не может найти их для удаления. Есть идеи?
РЕДАКТИРОВАТЬ: моя новая команда выглядит так:
find . -type f -print0 | sort -R | tail -n +(N+1) | xargs -0 rm
и теперь я получаю сообщение об ошибке rm: missing operand . Кроме того, я нахожусь на компьютере с CentOS, поэтому флаг -z для меня недоступен.
РЕДАКТИРОВАТЬ # 2 Эта команда работает:
find . -type f -print0 | sort -R | tail -n +(N+1) | xargs -0 -r rm
но когда я выполняю find . -type f | wc -l для получения количества файлов в каталоге (которое должно быть N, если команда работала правильно) не изменилось от начального количества файлов.
