Я хотел бы сократить большую базу данных из командной строки до 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, если команда работала правильно) не изменилось от начального количества файлов.