[英]linux-shell: renaming files to creation time
大家早上好,
對於一個網站,我想將文件夾中的文件(圖片)從“1.jpg,2.jpg,3.jpg ...”重命名為“yyyymmdd_hhmmss.jpg” - 所以我想讀出創作times 一組 times 作為圖片的名稱。 有人知道如何使用 linux-shell 或 imagemagick 做到這一點嗎?
謝謝!
在 Linux 外殼中:
for f in *.jpg
do
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
done
說明:
for f in *.jpg do
這將啟動所有 jpeg 文件的循環。 這樣做的一個特點是它可以處理所有文件名,甚至是名稱中帶有空格、制表符或其他困難字符的文件名。
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
這將重命名文件。 它使用-r
選項告訴date
顯示文件的日期而不是當前日期。 規范+"%Y%m%d_%H%M%S"
告訴date
按照您指定的格式對其進行格式化。
文件名$f
放在使用雙引號的地方。 這可以確保奇怪的文件名不會導致錯誤。
mv
的-n
選項告訴 move 永遠不要覆蓋現有文件。
done
這樣就完成了循環。
對於交互式使用,您可能更喜歡將命令全部放在一行上。 在這種情況下,請使用:
for f in *.jpg; do mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"; done
要根據 EXIF 創建日期(而不是文件系統日期) exiftool
文件,我們需要exiftool
或等效項:
for f in *.jpg
do
mv -n "$f" "$(exiftool -d "%Y%m%d_%H%M%S" -CreateDate "$f" | awk '{print $4".jpg"}')"
done
說明:
以上與文件日期的命令非常相似,但使用exiftool
和awk
來提取EXIF圖像創建日期。
exiftool
命令以如下格式提供日期:
$ exiftool -d "%Y%m%d_%H%M%S" -CreateDate sample.jpg Create Date : 20121027_181338
我們想要的實際日期是輸出中的第四個字段。
我們將exiftool
輸出傳遞給awk
以便它可以提取我們想要的字段:
awk '{print $4".jpg"}'
這將選擇日期字段並添加.jpg
擴展名。
感謝@John1024!
我需要根據上次修改日期同時重命名具有不同擴展名的文件:
for f in *; do
fn=$(basename "$f")
mv "$fn" "$(date -r "$f" +"%Y-%m-%d_%H-%M-%S")_$fn"
done
"DSC_0189.JPG" ➜ "2016-02-21_18-22-15_DSC_0189.JPG"
"MOV_0131.avi" ➜ "2016-01-01_20-30-31_MOV_0131.avi"
如果您不想保留原始文件名:
mv "$fn" "$(date -r "$pathAndFileName" +"%Y-%m-%d_%H-%M-%S")"
希望它對我這樣的菜鳥有所幫助!
嘗試這個
for file in `ls -1 *.jpg`; do name=`stat -c %y $file | awk -F"." '{ print $1 }' | sed -e "s/\-//g" -e "s/\://g" -e "s/[ ]/_/g"`.jpg; mv $file $name; done
雖然可能有更簡單的方法。
我創建了一個 shell 腳本; 我認為它只是mac,linux可能需要其他參數。
#!/bin/bash
BASEDIR=$1;
for file in `ls -1 $BASEDIR`; do
TIMESTAMP=`stat -f "%B" $BASEDIR/$file`;
DATENAME=`date -r $TIMESTAMP +'%Y%m%d-%H%M%S'`-$file
mv -v $BASEDIR/$file $BASEDIR/$DATENAME;
done
根據文件創建時間更改文件名:
exiftool "-filename<FileCreateDate" -d %Y%m%d_%H%M%S%z%%-c.%%le input.jpg
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.