我在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!"