2009-12-15 81 views
1

我有一個目錄充滿了隨機名稱的文件。我希望能夠根據時間順序(即文件創建日期)將它們重命名爲'文件1''文件2'等。我可以寫一個簡短的Python腳本,但後來我什麼也學不到。我想知道是否有一個聰明的1行命令可以解決這個問題。如果任何人都可以指出我正確的方向。根據排序的創建日期重命名文件?

我正在使用zsh。

謝謝!

+3

不希望聽起來挑剔,我不相信你可以得到文件的創建日期。 ctime是inode更改時間,與您想要的不同。但是,您可以獲取修改時間。 – 2009-12-15 16:50:53

+0

@Brian Agnew:文件創建日期實際上是filesytem的一個特性(儘管在大多數unix/linux popuplar文件系統中確實很少見)。儘管它在大多數基於xBSD的系統(包括Mac OS X)和Windows上都有。 – ChristopheD 2009-12-15 17:02:23

+0

@ChristopheD - 不知道MacOS支持它。我相信ZFS也是如此。但它表現爲ctime嗎? – 2009-12-16 13:09:16

回答

3

zsh

saveIFS="$IFS"; IFS=$'\0'; while read -A line; do mv "${line[2]}" "${line[1]%.*}.${line[2]}"; done < <(find -maxdepth 1 -type f -printf "%T+ %f\n"); IFS="$saveIFS" 

對於bash(注意在選項read和差異從零開始的索引,而不是一型):

saveIFS="$IFS"; IFS=$'\0'; while read -a line; do mv "${line[1]}" "${line[0]%.*}.${line[1]}"; done < <(find -maxdepth 1 -type f -printf "%T+\0%f\n"); IFS="$saveIFS" 

這些通過添加重命名文件修改日期到原始文件名的開頭,保留該原始文件名以防止名稱衝突。

由此產生名的文件名可能看起來像:

2009-12-15+11:08:52.original.txt 

由於空用作內部字段分隔符(IFS),具有空格的文件名應予以保留。