Я позволил сценарию генерации данных работать слишком долго, теперь у меня есть более 200 000 файлов, которые мне нужно сократить до 1000. Из командной строки Linux есть простой способ удалить все, кроме 1000 этих файлов, где файлы, которые будут сохранены не будет зависеть от имени файла или любого другого атрибута?
13
Ответы:
Удалить все кроме 1000 случайных файлов в каталоге
Код:
Объяснение:
/path/to/dir
сfind
;print0
: использовать\0
( нулевой символ ) в качестве разделителя строк; поэтому пути к файлам, содержащие пробелы / переводы строк, не нарушают сценарийsort
;-z
: использовать\0
(нулевой символ) в качестве разделителя вместо\n
(перевод строки)-R
: случайный порядокtail
;-z
: обрабатывать список как разделенный нулями (так же, как и сsort
)-n +1001
: показать строки, начинающиеся с 1001 (т.е. опустить первые 1000 строк)xargs -0 rm
- удалить оставшиеся файлы;-0
: опять с нулевым разделениемПочему это лучше, чем решение Quixotic *:
find
.find
не заканчивается на\n
(перевод строки).* - кредит на Quixotic для
| sort -R | head -1000
, дал мне отправную точку.источник
find . -type f | sort -R | tail -n +1001 | xargs rm
find
? Я постараюсь улучшить свой ответ, просто нужно немного поработать с ним.tail: invalid option -- 'z'
версия хвоста у меня 8,4Используйте временный каталог, затем
find
все ваши файлы, перемешайте список со спискомsort
и переместите верхнюю 1000 списка во временный каталог. Удалите остальные, затем переместите файлы обратно из временного каталога.Если вы
xargs
жалуетесь на длину строки, используйте меньшее число сhead
и повторяйте команду по мере необходимости (т.е. измените-1000
на-500
и запустите ее дважды, или измените на-200
и запустите ее 5 раз).Он также не сможет обрабатывать имена файлов, которые содержат пробелы; а @ ответ RLD в шоу, вы можете использовать
find
«s-print0
аргумент,-z
аргументыsort
иhead
, и-0
с ,xargs
чтобы обеспечить надлежащую обработку имен файлов.Наконец, если
tmp-dir
уже существует, вы должны заменить имя каталога, который не существует.источник
find
помощью пробела.Для пользователей Mac должен сделать следующий скрипт.
tr
позволит sort и tail работать со списками\n
вместо\0
.источник
Самым простым может быть rm -rf каталога, а затем перезапустить сценарий генерации данных, убедившись, что он не выполняется слишком долго.
источник