【发布时间】:2015-02-13 00:26:39
【问题描述】:
基本上我的硬盘崩溃了,我能够恢复所有文件,但是,所有文件都保留了它们的元数据,有些保留了它们的名称,我有 274000 张图像,我或多或少需要按以下方式分类到文件夹中日期。
假设它从第一个文件开始,它会从文件中获取日期,创建一个子文件夹,直到日期更改,继续将该文件移动到创建的文件夹中,一旦日期更改,它将创建一个新文件夹并继续做同样的事情。
我确定这是可能的,我真的不想手动执行此操作,因为这需要数周时间...
假设我有一个目标文件夹 /target/
目标包含 274000 个文件,根本没有子文件夹。
文件夹结构应该是/target/YY/DD_MM/filenames
我想为此创建一个 bash 脚本,但我不确定从哪里开始。
我发现了这个:
#!/bin/bash
DIR=/home/data
target=$DIR
cd "$DIR"
for file in *; do
dname="$( date -d "${file%-*}" "+$target/%Y/%b_%m" )"
mkdir -vp "${dname%/*}"
mv -vt "$dname" "$file"
done
创建一个文件夹而不检查它是否存在会删除该文件夹中的文件吗?
我也不太确定在 dir 路径名中添加星号会做什么?
我对 bash 不太熟悉,但如果有人可以向我解释一下发生了什么,我很乐意让它工作?
谢谢!
【问题讨论】:
-
文件名称中是否包含日期?给我们一个示例输入文件名
-
并非全部不,我希望有办法从它自己的文件中获取日期@sputnick
-
ls -ltr是否显示文件的不同日期? -
创建日期通常不会在 linux 中的文件上编码。您可以获取文件的访问日期和修改日期。您更喜欢按哪一个日期排序?
-
@Xorg 我刚刚在这个线程上发布了一个答案,你介意检查一下以确保我没有犯任何错误吗?
标签: bash sorting command-line directory command