В моем родительском каталоге у меня 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 ищет более быстрый / лучший способ сделать это, а не графический интерфейс, поэтому любая помощь приветствуется. Пожалуйста, сделайте это как можно проще!
Заранее спасибо!
Если это - одноразовая задача, Вы могли бы использовать расширение оболочки как так:
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 файлов, и последняя строка обрабатывает остальных.
Что-то вроде этого мало сценария должно сделать это для Вас:
#!/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