gpt4 book ai didi

bash - 按日期将文件分类到子文件夹中 - bash

转载 作者:行者123 更新时间:2023-11-29 09:38:09 26 4
gpt4 key购买 nike

基本上我的硬盘坏了,我能够恢复所有文件,但是,所有文件都保留了它们的元数据,有些文件保留了它们的名称,我有 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

创建一个文件夹而不检查它是否存在会删除该文件夹中的文件吗?

我也不太确定在目录路径名中添加星号会做什么?

我不太熟悉 bash,但如果有人可以向我解释一下发生了什么,我很乐意让它工作?

谢谢!

最佳答案

我似乎找到了适合我的答案,这在 OSX 上对三个文件运行良好,在我在大型文件夹上运行它之前,你们能检查一下这不会在某个地方失败吗?

#!/bin/bash

DIR=/Users/limeworks/Downloads/target
target=$DIR
cd "$DIR"

for file in *; do
# Top tear folder name
year=$(stat -f "%Sm" -t "%Y" $file)
# Secondary folder name
subfolderName=$(stat -f "%Sm" -t "%d-%m-%Y" $file)

if [ ! -d "$target/$year" ]; then
mkdir "$target/$year"
echo "starting new year: $year"
fi
if [ ! -d "$target/$year/$subfolderName" ]; then
mkdir "$target/$year/$subfolderName"
echo "starting new day & month folder: $subfolderName"
fi
echo "moving file $file"
mv "$file" "$target/$year/$subfolderName"

done

关于bash - 按日期将文件分类到子文件夹中 - bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27475057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com