为什么在 AIX 中 rm 命令无法识别 w 标志?

为什么在 AIX 中 rm 命令无法识别 w 标志?

我有一个 bash 脚本,它在 AIX 中保留最后 5 个副本,如下所示:

rm `ls -lt /path/the_file_* | tail -n +6`

但我收到这个错误:

rm: Not a recognized flag: w

更新

ls命令返回以下内容:

-rw-r--r--    1 user   group1           14 Mar 11 09:54 the_file_20130311.bz2

这有什么线索吗?

答案1

你说的本质上是

rm -rw-r--r-- 1 user group1 14 Mar 11 09:54 the_file_20130311.bz2

换句话说。递归删除名为:

1
user
group1
14
Mar
...

如果有一个-wrm 标志和其他奇怪的事情-rw-r--r--

更好的选择可能是使用ls -t.不用担心它不在单独的行上,因为可以ls检测它的输出是否到 tty。

通过例如演示:

ls -t | cat

但另一个问题出现了,那就是你不在正确的目录中。所以你所说的实际上是删除当前目录中的文件,该文件的名称与/path/.

因此,首先确保您处于正确的路径,或者,如果您可以find在系统上安装 GNU,则另一个选择将是以下方向:

find /path/to/files -maxdepth 1 -type f -name 'the_file_*' -printf '%T@ %p\n' |
  sort -nr | head -n6 | cut -f2- -d" "

请注意,您需要完整路径才能获得正确的列表。

然后;如果看起来不错,请将其添加到rm例程中。

答案2

命令返回什么ls ...?请记住,该命令已运行,并且输出作为参数给出rm。没有什么可以使输出成为“文件名”。如果-w那里确实应该有一个文件,也许--AIX 上有结束标志,它应该是rm -- ...

更新:

哦,脑子进水了。不仅会ls -l给出文件名,还会给出权限,例如-rw...,并且(如上所述)rm将其作为标志。你应该做:

rm `ls -t /path/the_file_* | tail -n +6`

有些命令(这​​是许多其他命令已经采用的 GNU 约定)的--意思是“标志在此结束”。因此,要删除一个名为 的文件,-rf您可以这样做rm -- -rf,一般来说,您可以说不拾取虚假标志cmd -flags -x -y -- anything goes here

相关内容