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


4

我已经为旧的已删除文件执行了恢复!这个过程取得了圆满成功,并且恢复了多年前的文件。

现在问题是仅通过JPG类型恢复的所有400000个文件。

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

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

...根据什么顺序重命名?他们的修改时间?他们的字母数字排序顺序?
slhck

@slhck,没有特别的重命名规范,只是给文件一些“体面”的名称与后来的处理问题有关,所以,基本上,重命名为它们被读取!
Zuul

为什么需要将它们放在子目录中?
Daniel Andersson

Answers:


2

我也有同样的问题。我在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

希望这项工作。


我会试一试,尽快回复你!
Zuul

Tks,做得很好!没有解决贷款零问题,但我可以在稍后阶段处理!再来一次。
Zuul

0

以下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

我会尝试一下,给你一些反馈!
Zuul

for f in *可能无法使用400000(!)文件。这个问题太多了。考虑将find . -print0结果管道循环到while read -d '' -r file或类似。
slhck

修正括号。我没有尝试运行它,因为我没有合适的文件集。
亚历克斯张伯伦

我试过这个,但它发出了一个未指定的错误......无法真正告诉错误是什么:(
Zuul
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.