将 2000 个 PDF 移动到多个文件夹中,每个文件夹包含 100 个文件

将 2000 个 PDF 移动到多个文件夹中,每个文件夹包含 100 个文件

我在 Mac 上有一个包含 2000 个 PDF 文件的文件夹。使用命令行,我想将每 100 个 PDF 移动到要在同一目录中创建的另一个文件夹中。这样我的主目录中就会有 20 个文件夹(名为 1、2 等),每个文件夹包含 100 个 PDF。我怎样才能做到这一点?

答案1

您可以使用,通过(位置参数范围)set批量处理 100 个文件,同时递增计数器来创建目录:"${@:START:COUNT}"shift 100c

set -- *.pdf
c=1
while (($#)); do
  mkdir ${c}
  if [ $# -ge 100 ]; then
    mv -- "${@:1:100}" ${c}
    c=$((c+1))
    shift 100
  else
    mv -- "${@}" ${c}
    shift $#
  fi
done

答案2

我刚刚为您的具体问题编写了下面的 bash 脚本。这可能对你有帮助。

#!/bin/bash

DEFAULT_DELIM_SIZE=100
num_of_total_file=$(ls | grep "pdf" | wc -l)
num_of_total_folder=$((num_of_total_file/DEFAULT_DELIM_SIZE))

echo "Total number of pdf files = $num_of_total_file"
echo "Total number of folder will generated if not exist $num_of_total_folder"

# create directories if not exist
for (( i = 0; i < $num_of_total_folder; i++ )); do
    if [[ ! -d $i ]]; then
        mkdir $i
    fi
done

# file name format should be like this <arbitrary_numb>-<folder_num>.pdf
for file in *.pdf; do
    prefix=$(echo $file | awk '{split($0, a, "-"); print a[2]}' | awk '{split($0, a, "."); print a[1]}')
    if [[ -d $prefix ]]; then
        mv $file $prefix
    fi
done

相关内容