.creation time
**shell script**
이제 모든 폴더를 반복할 수 있는 파일을 작성하려고 합니다 . > 생성 시간을 추출하고 이를 파일 이름 타임스탬프로 바꾸세요. 다음은 작은 예입니다.
타임스탬프가 잘못된 원본 파일 이름:
파일 이름,생산 일, 수정일
20180524010500530_FR785101.jpg, 2018-05-24 00:05:00, 2018-05-24 00:05:34
출력은 다음과 같습니다:
파일 이름,생산 일, 수정일
20180524000500530_FR785101.jpg, 2018-05-24 00:05:00, 2018-05-24 00:05:34
이것이 쉘 스크립트로 달성될 수 있는지 누가 말해 줄 수 있습니까? 그렇다면 이 ls
명령이나 작업을 수행할 수 있는 다른 명령을 사용하는 방법을 안내해 줄 수 있는 사람이 있습니까 ?
명령 을 사용하여 직접 기록을 시작했지만 ls
생성 시간을 추출하여 파일 이름 타임스탬프로 바꾸는 방법을 알 수 없으며 이미지 파일이 포함된 모든 폴더 및 하위 폴더에 대해 스크립트를 실행하는 방법도 모릅니다. ,
답변1
명령을 사용하여 stat
파일 생성 시간을 얻을 수 있습니다.
CREATION_TIME=`debugfs -R 'stat /path/to/file' /dev/sdaX | awk -F '-' '/crtime/{print $NF}'`
touch
명령을 사용하여 수정 날짜를 변경할 수 있습니다 .
touch -d "$CREATION_TIME" file
답변2
다음은 귀하가 제공한 파일 이름 형식을 엄격하게 사용하여 이 작업을 수행하는 스크립트입니다. 모든 파일이 먼저 날짜/시간으로 시작하고 1시간 지연만 수정하면 된다고 가정합니다. epoch 시간을 사용하여 파일 이름의 시간에서 1시간을 빼고 파일 이름을 바꿉니다.
스크립트의 디렉터리를 로컬 디렉터리로 변경합니다.
루퍼.sh
#!/bin/bash
echo "Sending directory to the past."
for path in /path/to/directory/*.jpg; do
filename=${path##*/}
#Convert to date format
oldDate="${filename:0:4}-${filename:4:2}-${filename:6:2} ${filename:8:2}:${filename:10:2}:${filename:12:2}"
#Get the epoch date
epochDate=$(date -d "$oldDate" +%s)
#Subtract 1 hour
epochDate=$(( $epochDate - 60*60 ))
#Converting and formating the new date
newDate=$(date -d @$epochDate +%Y%m%d%H%M%S)
#New filename
newFilename=$(dirname $path)/$newDate"${filename:14}"
#Renaming the file
mv $path $newFilename
done
편집: 이름을 바꾸기 전에 생년월일을 비교하는 스크립트는 다음과 같습니다. (만일을 대비해 꼭 백업해두세요)
#!/bin/bash
echo "Sending directory to the past."
for path in /path/to/directory/*.jpg; do
filename=${path##*/}
#Convert to date format
oldDate="${filename:0:4}-${filename:4:2}-${filename:6:2} ${filename:8:2}:${filename:10:2}:${filename:12:2}"
#Get the epoch date
epochDate=$(date -d "$oldDate" +%s)
#Birth date - Only works if your filesystem supports it.
birthDate=$(stat $path | grep 'Birth:' | sed 's/\..*//' | awk '{print $2" "$3}')
epochBirthDate=$(date -d "$birthDate" +%s)
if [ $epochDate != $epochBirthDate ]; then
#Subtract 1 hour
epochDate=$(( $epochDate - 60*60 ))
#Converting and formating the new date
newDate=$(date -d @$epochDate +%Y%m%d%H%M%S)
#New filename
newFilename=$(dirname $path)/$newDate"${filename:14}"
#Renaming the file
mv $path $newFilename
fi
done