2016-02-14 82 views
0

我正在尋找一種編程方式將文件的日期添加到文件名。我在Mac,優勝美地(10.10)。在bash中添加文件日期到文件名

使用Bash,我已經付出了相當多的努力,但到目前爲止太新了。這是我到目前爲止有:

#!/bin/bash 

#!/bin/bash 

(IFS=' 
' 
for x in `ls -l | awk '{print$9" "$7"-"$6"-"$9}'` 
do 
    currentfilename=$(expr "$x" : '\($substring\)') 
    filenamewithdate=$(expr "$x" : '.*\($substring\)') 
    echo "$currentfilename" 
    echo "$filenamewithdate" 
done) 

這裏的想法是捕捉詳細的LS輸出,使用awk來捕捉字符串的文件名中的列($ 9),並且還日期字段($ 7和$ 6)然後循環輸出捕獲以前的文件名和新的文件名與日期mv文件從舊文件名到新。 awk語句添加一個空格來分隔新的當前文件名。 echo聲明現在在測試我是否能夠解析awk輸出。我只是不知道要爲$ substring添加什麼來獲取所需的字符串部分。

我還有很多需要了解Bash腳本的知識,所以我希望你在我學習的時候能夠忍受我。任何指導?

謝謝。

+1

線對於初學者來說,如果你不知道如何使用'男人programOfInterest',你需要。然後,使用'man stat'。你應該可以使用'stat'的'printf'選項來構建更好的日期文件名。你在'ls ...'中使用'for x'應該替換爲'for f in *; do newFName = $(stat「$ f」... opts to stat); ....; done'。不要在for循環中使用'ls',這是一個不好的習慣。這會讓你以不同的方式思考你的問題。更新你的Q或刪除這個併發佈一個新的Q來幫助澄清你的問題。祝你好運。 – shellter

+2

詳細闡述@ shelter的評論:不要使用任何東西的'ls'輸出。 'ls'是交互式查看目錄元數據的工具。用代碼解析'ls'輸出的任何嘗試都被破壞。 * Globs *非常簡單且正確: 閱讀[Parsing ls](http://mywiki.wooledge.org/ParsingLs) –

+0

如果您在優勝美地編碼,則不要使用linux標籤。我沒有Mac,所以'stat'可能不可用(我希望不是!)。如果沒有,你的'awk'代碼將需要允許文件日期超過六個月的情況,即$ 8的價值變化時間戳,以一年的價值。祝你好運。 – shellter

回答

4

望着stat man page,你會想:

for file in *; do 
    filedate=$(stat -t '%Y-%m-%dT%H:%M:%S' -f '%m' "$file") 
    newfile="$file-$filedate" 
    echo "current: $file -> new: $newfile" 
done 

調整您的首選日期時間格式,以您的口味。

你可以保存

for file in *; do 
    newfile=$(stat -t '%Y-%m-%dT%H:%M:%S' -f '%N-%m' "$file") 
相關問題