我有一个包含大量文件的目录。我只想保留最新的6个。我想我可以看看他们的创建日期,并在所有那些太旧的版本上运行rm,但这是做这个更好的方法吗?也许我可以使用一些Linux命令?在shell脚本中按日期删除文件?
谢谢!
:)
我有一个包含大量文件的目录。我只想保留最新的6个。我想我可以看看他们的创建日期,并在所有那些太旧的版本上运行rm,但这是做这个更好的方法吗?也许我可以使用一些Linux命令?在shell脚本中按日期删除文件?
谢谢!
:)
rm -v $(ls -t mysvc-*.log | tail -n +7)
ls -t
,清单按时间tail -n +7
排序,+7这里指长度7,让所有,但第一个7行$()
使得来自封闭命令输出的字符串列表rm
删除文件,当然$()
在任何空格上分裂!你能解释一下这个命令吗?我不是Linux专业版:)。谢谢 – user1856596 2013-02-22 08:24:01
谢谢@JanHudec :) @ user1856596虽然在这里要注意带有空白字符(或其他的游戏名称)的文件名:'find'命令在实践中将会很安全_safer_ – sehe 2013-02-22 09:37:18
这是我的承担,作为一个脚本。它确实处理文件名中的空格,即使它有点破解。
#!/bin/bash
eval set -- $(ls -t1 | sed -e 's/.*/"&"/')
if [[ $# -gt 6 ]] ; then
shift 6
while [[ $# -gt 0 ]] ; do
echo "remove this file: $1" # rm "$1"
shift
done
fi
第二个选项是每行一个文件名“1”。但实际上并不重要,因为当ls没有喂tty时,这似乎是默认的。
查看'find'。 – squiguy 2013-02-22 08:14:46
'find/my/path -type f -mtime +6 -exec rm {} \;'看起来怎么样? – user1856596 2013-02-22 08:15:46
不好。如果最后6个文件在6天之前更新,它们全部被删除。如果最近6天创建了十亿个文件,则不会被删除。另外,'-delete'比'-exec rm P {] \;' – sehe 2013-02-22 08:17:10