Случайно выберите долю файлов из данного каталога

В данной директории имеется около 10000 файлов. Есть ли какая-нибудь команда, которая может помочь мне случайным образом выбрать из него 1000 файлов и поместить их в другой каталог. Выбранные файлы должны быть удалены из исходного каталога.

One Solution collect form web for “Случайно выберите долю файлов из данного каталога”

Если у вас есть shuf , он легко позволит вам делать то, что вы хотите, при условии, что в нем нет символа новой строки, и нет подкаталогов:

 mapfile -t sample < <(shuf -n 1000 -e given_directory/*) mv "${sample[@]}" other_directory 

Если есть подкаталоги, вы можете получить список файлов, используя find вместо glob. Или вы можете перепрофилировать и фильтровать. find также поможет вам разобраться с файлами, которые могут иметь новые строки в своих именах (это действительно плохая идея, но это не обязательно означает, что вы можете игнорировать эту возможность), так как вы можете использовать действие -print0 сочетании с -z flag to shuf . Например,

 find given_directory -type f -print0 | shuf -z -n 1000 | xargs -0 mv -t other_directory 

mv -t – это (очень полезное) расширение Gnu, которое позволяет вам xargs целевой каталог в начале командной строки, который хорошо работает с xargs / find -exec для ввода нескольких аргументов в конце командной строки.

  • Как рекурсивно перемещать партии из 20 файлов в пронумерованные папки из папки из 1000 файлов
  • Замена точек в имени файла символами подчеркивания, кроме расширения
  • перемещать файлы определенного шаблона в другой каталог
  • Как удалить файл с помощью команды mv?
  • Переместить только при проверке?
  • Перемещение файлов по каталогам по критериям глубины
  • Использование команды find для переименования файлов
  • Как скопировать содержимое папки с файлами при сохранении структуры папок?
  • Как извлечь только «базовое имя» родительского каталога в оболочке?
  • Как права на каталоги остаются такими же после команды mv?
  • Перемещение файлов в отдельные каталоги на основе группировки, определенной в файле CSV
  • Linux и Unix - лучшая ОС в мире.