2009-12-15 58 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),具有空格的文件名应予以保留。