【发布时间】:2016-04-23 21:59:56
【问题描述】:
我只需要在一个目录中保留最近的 4 个文件。我使用了以下命令:
rm -f `ls -t $SOMEDIR/archive/* | awk 'NR>4'`
这行得通。我想使用变量 NUM_TO_KEEP 而不是“4”,所以我尝试了以下方法:
NUM_TO_KEEP=4
rm -f `ls -t $SOMEDIR/archive/* | awk -v num=$NUM_TO_KEEP 'NR>$num'`
我收到以下错误: awk:第 1 行附近的语法错误 awk:在 1 号线附近救援
我也尝试了一个简单的 ls | awk -v var="foo" 'NR>4'
我得到同样的错误。 我在 linux 和 solaris 上尝试这个,两个操作系统都出现相同的错误。 知道我做错了什么吗?我的问题是关于我在使用“-v”选项时遇到的错误,一旦我在 -v 选项旁边设置了一个变量,我就会得到一个错误。 (ls | awk -v 'NR>4' 有效,ls | awk -v="foo" 'NR>4' 给出错误)
【问题讨论】:
-
在您的 awk 脚本中将
$num更改为num。 -
顺便说一句,一种不易出错的方法(也就是说,一种不允许文件具有阻止它们被成功清理的名称的方法)是使用@987654327 @ 打印一个以 NUL 分隔的纪元时间/文件名对流,对该流进行数字排序,并杀死除前四个元素之外的所有元素。解析
ls被认为是代码异味是有原因的。 -
至于你想要做什么,stackoverflow.com/a/299911/14122 是一个比必要的实现稍微复杂一些。
-
...而stackoverflow.com/a/990575/14122 是另一个正确的变体(很遗憾,对于一个其他主题问题有这么多不好的答案)。
-
谢谢@EdMorton,这是我一直在寻找的答案。这意味着我无法使用它,因为我无法控制用户拥有的 awk 版本。