Разделение папки на несколько папок без создания подпапок в терминале / bash - PullRequest
0 голосов
/ 14 октября 2018

Как разделить родительскую папку на 2 или более без создания подпапок.

как папка A в папке A1, FolderA2, но все в одном каталоге, а не в подпапках в папке A.

На самом деле это сценарий, который я использую, но он заканчивается только созданием подпапок

let fileCount=3000
let dirNum=1

for f in *
do
    [ -d $f ] && continue
    [ $fileCount -eq 3000 ] && {
        dir=$(printf "%03d" $dirNum)
        mkdir $dir
        let dirNum=$dirNum+1
        let fileCount=0
    }

    mv $f $dir
    let fileCount=$fileCount+1
done

1 Ответ

0 голосов
/ 14 октября 2018

В родительском каталоге folderA запустите следующий скрипт:

#!/bin/bash
i=0  # counter for current file
j=0  # counter for current directory
batchsize=1000 # size of each batch
find folderA -type f -print0 | while read -r -d $'\0' file 
do
    if (( i % batchsize == 0 )) 
    then
        (( j++ ))
        mkdir "dir_$j"
    fi
    mv -- "$file" "dir_$j"
    (( i++ ))
done

Если все файлы в folderA имеют «нормальные» имена, то есть без пробелов, без символов глобуса и т. Д.,Сценарий может быть записан как

#!/bin/bash
find folderA -maxdepth 2 -type f | xargs -n 1000 | while read files 
do
     mkdir dir_$((++i))
     mv $files dir_$i/
done

Что является более коротким, а также гораздо более производительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...