Как из папки раскидать все файлы по подпапкам по 10 шт?
Есть папка, в ней много файлов .mp4 Как используя батник (не powershell) внутри папки создать много подпапок и раскидать по подпапкам эти файлы, чтоб в каждой подпапке было не более 10 файлов.
Естественно, что если в папке у нас будет не кратное кол-во .mp4 файлов то в последней подпапке будет закинуто меньше чем 10 файлов.
Ответы (1 шт):
script.sh
#!/usr/bin/env bash
DIR="${0%/*}"
# значения по умолчанию
dir_in="$DIR/papka_A"
dir_out="$DIR/papka_B"
subdir_name="subpapka"
ext="mp4"
number=10
while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do case $1 in
--dir_in ) shift; dir_in=$1;;
--dir_out ) shift; dir_out=$1;;
--ext ) shift; ext=$1;;
--number | -n ) shift; number=$1;;
--subdir_name ) shift; subdir_name=$1;;
esac; shift; done
if [[ "$1" == '--' ]]; then shift; fi
mkdir -p "$dir_out"
i=0
while [[ $(ls "$dir_in"/* | grep ".$ext$") != "" ]]; do
subdir="$dir_out"/"$subdir_name"_$(printf "%03d" $i)
mkdir -p "$subdir"
mv $(ls "$dir_in"/* | grep ".$ext$" | head -n $number) "$subdir"
i=$[i+1]
done
exit
Для большего понимания рассмотрим пример
подготовить полигон можно таким однострочником на баш
mkdir -p papka_A && touch papka_A/file_{01..99}.mp4 && touch papka_A/file_{a..z}.xxx
здесь мы создали папку papka_A и 99 файлов в ней с расширением mp4, а также для фона добавили других файлов
получим примерно следующее
$ tree papka_A
papka_A
├── file_01.mp4
├── file_02.mp4
...
├── file_98.mp4
└── file_99.mp4
├── file_a.xxx
├── file_b.xxx
...
├── file_y.xxx
└── file_z.xxx
делаем наш скрипт исполняемым и запускаем его
chmod +x script.sh
./script.sh --dir_in papka_A --dir_out papka_B --ext mp4 -n 10 --subdir_name subpapka
где при желании указываем свои параметры. После отработки скрипта в итоге получим:
$ tree papka_B
papka_B
├── subpapka_000
│ ├── file_01.mp4
│ ├── file_02.mp4
│ ├── file_03.mp4
│ ├── file_04.mp4
│ ├── file_05.mp4
│ ├── file_06.mp4
│ ├── file_07.mp4
│ ├── file_08.mp4
│ ├── file_09.mp4
│ └── file_10.mp4
├── subpapka_001
...
└── subpapka_009
├── file_91.mp4
├── file_92.mp4
├── file_93.mp4
├── file_94.mp4
├── file_95.mp4
├── file_96.mp4
├── file_97.mp4
├── file_98.mp4
└── file_99.mp4
а в папке papka_A останутся тока файлы без расширения mp4.
$ tree papka_A
papka_A
├── file_a.xxx
├── file_b.xxx
├── file_c.xxx
...
└── file_z.xxx