![選擇輸出的特定部分並用它來重命名文件](https://rvso.com/image/1497067/%E9%81%B8%E6%93%87%E8%BC%B8%E5%87%BA%E7%9A%84%E7%89%B9%E5%AE%9A%E9%83%A8%E5%88%86%E4%B8%A6%E7%94%A8%E5%AE%83%E4%BE%86%E9%87%8D%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6.png)
我目前正在對從損壞的檔案系統中恢復的檔案進行排序。現在它們的檔名都是這樣的: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
如您所期望的那樣在命令中使用該值,但前提是我們實際上得到了日期。如果沒有得到任何回報,請不要嘗試重命名該檔案(以防萬一使用先前的命令鏈時事情並不總是以正確的方式進行)。