เป็นเวลานานแล้วที่ฉันได้เขียนโปรแกรม Unix แต่ฉันตั้งใจตั้งปีที่ไม่ถูกต้องในรูปของคริสมาสต์รูปถ่ายและฉันรู้ว่าถ้าฉันไม่เปลี่ยนวันจาก 2015 เป็น 2014 มันจะเป็นปัญหาในภายหลัง .
บางทีนี่อาจเป็นงานง่าย แต่ฉันไม่พบวิธีง่าย ๆ ในการทำเช่นนั้น
ฉันแก้ไขสคริปต์ที่ฉันพบที่นี่ซึ่งเดิมใช้เพื่อแก้ไขวันที่ลบหนึ่งเดือน
นี่คือสคริปต์ต้นฉบับ:
#!/bin/bash
# find specific files
files=$(find . -type f -name '*.JPG')
# use newline as file separator (handle spaces in filenames)
IFS=$'\n'
for f in ${files}
do
# read file modification date using stat as seconds
# adjust date backwards (1 month) using date and print in correct format
# change file time using touch
touch -t $(date -v -1m -r $(stat -f %m "${f}") +%Y%m%d%H%M.%S) "${f}"
done
นี่คือสคริปต์ที่แก้ไขของฉันซึ่งบังคับให้วันที่ปี "2014":
#!/bin/bash
# find specific files
#files=$(find . -type f -name '*.JPG')
# use newline as file separator (handle spaces in filenames)
IFS=$'\n'
for f in $*
do
# read file modification date using stat as seconds
# adjust date backwards (1 month) using date and print in correct format
# change file time using touch
touch -t $(date -v +1y -r $(stat -f %m "${f}") +2014%m%d%H%M.%S) "${f}"
done
ตอนนี้ฉันรู้แล้วว่าฉันสามารถทำรุ่นทั่วไปได้มากกว่านี้:
#!/bin/bash
# find specific files
#files=$(find . -type f -name '*.JPG')
# use newline as file separator (handle spaces in filenames)
IFS=$'\n'
for f in $*
do
# read file modification date using stat as seconds
# adjust date backwards (1 month) using date and print in correct format
# change file time using touch (+1y adds a year "-1y" subtracts a year)
# Below line subtracts a year
touch -t $(date -v -1y -r $(stat -f %m "${f}") +%Y%m%d%H%M.%S) "${f}"
# Below line adds a year
# touch -t $(date -v +1y -r $(stat -f %m "${f}") +%Y%m%d%H%M.%S) "${f}"
done
ในการใช้ไฟล์นี้คุณจะต้องเขียนและ
chmod +x fn
เพื่อดำเนินการ:
./fn files-to-change
Fn = ของคุณชื่อไฟล์ที่เป็นของคุณคำสั่ง
ตัวอย่าง
./fn *.JPG
จะเปลี่ยนวันที่ลบหนึ่งปีในไดเรกทอรีที่คุณอยู่
touch -d "2 hours ago" /path/*.txt
ตัวอย่างเช่น