首页 > 解决方案 > 将一个文件夹拆分为多个文件夹而不在终端/ bash中创建子文件夹

问题描述

如何在不创建子文件夹的情况下将父文件夹拆分为 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

标签: linuxbashsplit

解决方案


在 的父目录中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

哪个更简洁,也更高效。


推荐阅读