選擇輸出的特定部分並用它來重命名文件

選擇輸出的特定部分並用它來重命名文件

我目前正在對從損壞的檔案系統中恢復的檔案進行排序。現在它們的檔名都是這樣的:f123123123.xls

如果我運行: file "f123123123.xls" 它會給我很多訊息,有時甚至是最後保存的日期。

例子:

./recup_dir.89/f111841280.xls:複合文檔文件V2 文檔,Little Endian,作業系統:Windows,版本1.0,代碼頁:-535,修訂號:5,總編輯時間:09:58:37,最後列印:2015 年9 月9 日星期三11:57:04,建立時間/日期:2015 年9 月3 日星期四03:15:36,上次保存時間/日期:2015 年10 月19 日星期一14:28 :03

如何選擇上次儲存的日期並使用它將我的檔案重新命名為:Oct-19-2015.xls ?

答案1

我們可以將幾個命令串在一起來完成它。我將讓這個範例將重命名的檔案寫入另一個目錄,它們可以移動到您喜歡的位置,但我個人喜歡將它們分開,以防出現一些錯誤的啟動。

mkdir renamed
for recovered in recup_dir.89/*xls; do
    new_name=$(date +'%b-%d-%Y' -d "$(file "$recovered"| grep -Po 'Last Saved Time/Date:\K[^,]*')")
    if [ -n "$new_name" ]; then
        mv "$recovered" "renamed/$new_name.xls"
    fi
done

這將循環遍歷目錄中的所有 xls 檔案(因為此資訊不會出現在所有檔案的輸出中)。對於每一個,它將運行file命令並使用 GNU grep 的 perl 風格正則表達式來查找Last Saved Time/Date:出現的位置,然後獲取其後的時間。然後,我們將使用該date命令按照您想要的方式重新格式化該時間,因此我們不必對輸出中的各個欄位進行太多操作。

這將為我們提供格式的日期Oct-19-2015,然後我們mv如您所期望的那樣在命令中使用該值,但前提是我們實際上得到了日期。如果沒有得到任何回報,請不要嘗試重命名該檔案(以防萬一使用先前的命令鏈時事情並不總是以正確的方式進行)。

相關內容