我在OSX上使用了一个bash脚本,它将SD卡中的所有内容复制到我的外部硬盘。将文件(图像)复制到根据创建日期构造的文件夹
脚本是这样的:
#!/bin/bash
now=$(date +"%d%m%Y")
mkdir -p /Volumes/WDigital/Images/Project1/$now
find /Volumes/Untitled/DCIM/ -name '*.JPG' -print0 | xargs -0 -J % rsync --progress --times % /Volumes/WDigital/Images/Project1/$now
这个脚本根据当前日期,并将所有图像,以这个目标上创建一个文件夹。
我想稍微修改一下这个脚本,以便每个图像都被复制到一个以创建日期命名的文件夹(与上次修改时相同)。
所以,如果我有3个文件,如:
- image1.jpg - 上次更改时间:08102016
- image2.jpg - 上次更改时间:10102016
- image3.jpg - 上次更改时间:08102016
我想在目的地(/卷/ WDigital/Images/Project1 /)获得2个文件夹与
- 文件夹08102016 - 包含图像1和图像3
- 文件夹10102016 - 包含图像2
我发现可以用在这里走出修改日期的“STAT”命令(Print a file's last modified date in Bash),但我米真不知道如何正确整合这一点。
我的想法是有像(伪)循环
#!/bin/bash
for i in /Volumes/Untitled/DCIM/*/*.jpg; do
creationdate = stat -f "%Sm" -t "%d%m%Y" "$i"
rsync --progress --times $i /Volumes/WDigital/Images/Project1/$creationdate
done
我怎样才能用一个for循环路径/卷/未命名/ DCIM// .JPG?
或者你们有没有人知道另一个方向来寻求合适的解决方案?
感谢
编辑:
这是我工作的代码(带计数器):
#!/bin/bash
counter=0
completefilenumber=$(find "/Volumes/Untitled/DCIM/" -type f -iname '*.JPG' | wc -l)
find "/Volumes/Untitled/DCIM/" -type f -iname "*.JPG" -print0 | while IFS= read -r -d $'\0' img; do
counter=$((counter+1))
echo "$img (Nr. ${counter}/${completefilenumber})"
creationdate=$(stat -f "%Sm" -t '%d%m%Y' $img)
mkdir -p /Volumes/WDigital/Images/Project1/$creationdate
rsync --times $img /Volumes/WDigital/Images/Project1/$creationdate
done
echo "Script done!"