Переместить последовательный диапазон пронумерованных файлов в новые каталоги

В моем родительском каталоге у меня 78 160 файлов.
Имена файлов: sb_604_dpm_0089000.dpx, sb_604_0089001.dpx и т. Д.

Я хочу переместить файлы в 4 подкаталога: subdir1, subdir2, subdir3, subdir4. В каждом каталоге должно быть ровно 20000 файлов в последовательном порядке.

Можно ли переместить определенный диапазон файлов из родительского каталога в подкаталоги, т. Е. Из файлов sb_604_dpm_0089000.dpx в файлы sb_604_dpm_0108,999.dpx, в subdir1 sb_604_dpm_0109000.dpx в файлы sb_604_dpm_p01 subdir2 и т. д.

Последняя папка будет содержать только оставшиеся файлы после первых 60 000.

Все это должно быть выполнено с использованием пакетного файла, в идеале он должен указывать / проверять диапазон перед продолжением перемещения. Возможно ли это?

В DOS я, вероятно, смогу решить это для себя, написав командный файл, но с Linux я немного растерялся ... Я не программист, я просто пользователь linux ищет более быстрый / лучший способ сделать это, а не графический интерфейс, поэтому любая помощь приветствуется. Пожалуйста, сделайте это как можно проще!

Заранее спасибо!

0
задан 11 May 2018 в 20:54

2 ответа

Если это - одноразовая задача, Вы могли бы использовать расширение оболочки как так:

mkdir subdir1 subdir2 subdir3 subdir4
mv sb_604_dpm_{0089000..0108999}.dpx subdir1
mv sb_604_dpm_{0109000..0128999}.dpx subdir2
mv sb_604_dpm_{0129000..0148999}.dpx subdir3
mv sb_604_dpm_*.dpx                  subdir4

{1..5} расширяется до 1 2 3 4 5, таким образом, вышеупомянутые команды расширяются до первых/вторых/третьих 20 000 файлов, и последняя строка обрабатывает остальных.

3
ответ дан 29 October 2019 в 08:47

Что-то вроде этого мало сценария должно сделать это для Вас:

#!/bin/bash

files=(*.dpx)
folder=1
count=0

if [ ! -d "folder$folder" ]; then
   mkdir "folder$folder"
fi

for i in "${files[@]}"
do
   mv "$i" "folder$folder"
   let count=$count+1
   if [ "$count" == "20000" ]; then
      let count=0
      let folder=$folder+1
      if [ ! -d "folder$folder" ]; then
        mkdir "folder$folder"
      fi
   fi
done

Поместите сценарий в файл в папке с файлами, которые Вы хотите переместить (например, папка в Вашей домашней папке, названной "моими-файлами") и назвать файл "перемещением". Затем из командной строки:

$ cd ~/my-files
$ chmod 755 move
$ ./move
2
ответ дан 29 October 2019 в 08:47

Другие вопросы по тегам:

Похожие вопросы: