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

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

  • Как удалить последнюю часть нескольких имен каталогов?
  • Перемещение подкаталога в новый родительский каталог, где новое имя каталога увеличивается на 1
  • Получить все имена файлов с определенным количеством символов
  • Как определить исходное местоположение файла?
  • Почему переименование файла с помощью команды mv изменяет дату и время «изменения» inode?
  • Переименовать папку с нечетными символами
  • Переименовать скрипт bash - false нет такой ошибки файла или каталога
  • переименуйте все файлы в каталоге в хэш-файл md5 с их именем (не содержимым)
  • 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 для ввода нескольких аргументов в конце командной строки.

    Linux и Unix - лучшая ОС в мире.