将目录内容拆分为多个子目录

将目录内容拆分为多个子目录

我有一个目录,里面有超过一千张图片。我想将文件拆分成多个子目录,每个子目录包含 100 个文件。我该怎么做?

答案1

以下对我而言很有效。在终端中打开目录,然后复制并粘贴以下脚本,按回车键。将在其中创建名为 dir_001、dir_002 等的子目录。

i=0; 
for f in *; 
do 
    d=dir_$(printf %03d $((i/100+1))); 
    mkdir -p $d; 
    mv "$f" $d; 
    let i++; 
done

答案2

使用具有范围和偏移量的数组移动固定数量的文件。

#!/bin/bash

shopt -s nullglob

a=(./src/*)
for ((i=0; i<${#a[@]}; i+=100)); do
    printf -v b ./img_%03d $((++n))
    mkdir -p $b && mv -t $b "${a[@]:$i:100}"
done

答案3

这将提示您需要多少个目录以及子目录前缀。 ls 命令只是提醒您有多少个文件。

ls -1 | wc -l

read -p 'How Many Directories: ' F;
read -p 'Sub-Directories Prefix: ' S;

PARRENT=${PWD}
# cd $PARRENT 
n=0
for i in *
do
  if [ $((n+=1)) -gt $F ]; then
    n=1
  fi
  todir=$PARRENT/"$S"_$n
  [ -d "$todir" ] || mkdir "$todir" 
  mv "$i" "$todir" 
done

来源:https://www.unix.com/shell-programming-and-scripting/248539-split-folder-huge-number-files-n-folders.html

相关内容