将文件夹拆分为多个文件夹,而无需在终端/ bash中创建子文件夹

时间:2018-10-14 12:19:19

标签: linux bash split

如何在不创建子文件夹的情况下将父文件夹分为2个或更多。

类似于文件夹A进入folderA1,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 :(得分:2)

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中的所有文件都具有“普通”名称,即没有空格,没有glob字符等,则脚本可以写为

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

比较简短,表现也更好。