我有一个文件列表,我希望按日期排序,然后将它们重命名为file1,file2,filen,其中file1是最旧的,filen是最新添加的。
有点像将ls的排序输出管道输出到mv,但我想知道最佳实践是什么。
答案 0 :(得分:0)
它看起来像这样,但我会在你自己的目录中的文件的COPY上测试它。如果/当它起作用时,删除倒数第三行中的单词echo
,因为目前它只显示它会做什么,而不做任何事情:
#!/bin/bash
i=1
while IFS=$'\n' read f; do
# Get file creation date through mdls
creation=$(mdls -raw -name kMDItemFSCreationDate "$f")
# Convert that to seconds for sorting
epoch=$(date -j -f '%Y-%m-%d %H:%M:%S %z' "$creation" +%s)
# And send on to "sort" along with the filename
echo $epoch:$f
done < filelist.txt | sort | while IFS=":" read d f; do
echo mv "$f" file$i
((i++))
done
它假定您的文件列表存储在名为filelist.txt