读取目录中的文件并将它们分组到新的子目录中(创建子目录并重命名文件)

读取目录中的文件并将它们分组到新的子目录中(创建子目录并重命名文件)

我已经恢复了旧的已删除文件!这个过程非常成功,恢复了几年前的文件。

现在的问题是检查所有恢复的 400000 个 JPG 类型的文件。

为了解决这个问题,我已经根据文件大小分离文件,并将符合条件的文件存储在不同的目录中:

find /path/to/files/ -size +100k -print0 | xargs -0 cp --target-directory=/path/to/filtered/files/

由于需要远程分析文件,我准备了一个网页来显示所有文件,以便将它们保存在本地。此网页将通过导航箭头一次显示 20 个文件!


我的问题是如何将 400000 个文件拆分成每个包含 20 个文件的子目录,并按顺序重命名文件:

重命名为

000001.jpg
000002.jpg
...
000020.jpg

通过创建子目录移动到子目录

page_0001

重复此操作,直到处理完所有 400000 个!

page_0002/000021.jpg
page_0002/000022.jpg
...
page_0002/000040.jpg

答案1

我有同样的问题。我用 BASH 编写了此代码,并且对我有用。

根据您的需求进行更改:

#/bin/bash

target_prefix=page

SOURCE_DIR=YOUR_DIR #Change this to source dir

N=0
Z=0

for entry in $SOURCE_DIR/*
do
    N=$((N+1))
    Z=$((Z+1))

    if [ "$N" == "1" ]; then
        mkdir $SOURCE_DIR/$target_prefix-$Z
        DIR="$SOURCE_DIR/$target_prefix-$Z"
    fi

    echo "Move image $entry number $N to dir $DIR"

    mv $entry $DIR/$Z.jpg #Change to your file extension

    if [ "$N" == "20" ]; then
                N=0
        fi
done

希望这个能起作用。

答案2

以下 Bash 脚本应该可以解决问题,但不保证一定有效。

i=1
for f in *
do
  fn=$(printf "%.6d" $i).jpg
  dn=page_$(printf "%.4d" $(($i%20)))
  mkdir -p $dn
  cp $f "$dn/$fn"
  i=$(($i+1))
done

相关内容