此命令的含义是:ls -lt | grep - | head -1 | awk '{print $9}' | xargs rm
。
我知道这些命令的含义,但是当我们通过管道将它们连接起来时会发生什么呢?
答案 0 :(得分:1)
查看长管道做什么的一种简单方法是一次运行一条管道。运行ls -lt
,然后运行ls -lt | grep -
,然后运行ls -lt | grep - | head -1
,依此类推。查看每个命令的中间输出是什么,以便您知道要输入到下一个命令中的内容。
$ cd /usr
$ ls -lt
total 156
drwxr-xr-x 11 root root 4096 Mar 6 06:35 src/
drwxr-xr-x 2 root root 90112 Mar 5 06:27 bin/
drwxr-xr-x 2 root root 12288 Mar 5 06:27 sbin/
drwxr-xr-x 155 root root 4096 Mar 5 06:27 lib/
drwxr-xr-x 50 root root 20480 Feb 20 18:11 include/
drwxr-xr-x 330 root root 12288 Feb 18 16:58 share/
drwxr-xr-x 2 root root 4096 Oct 19 13:51 games/
drwxr-xr-x 3 root root 4096 Jul 19 2016 locale/
drwxr-xr-x 10 root root 4096 Jul 19 2016 local/
文件列表,其中每个条目均带有单独的行以及权限,大小和其他信息。看着man ls
,我看到-t
标志意味着文件是按照修改时间从最新到最旧的顺序进行排序的。
$ ls -lt | grep -
drwxr-xr-x 11 root root 4096 Mar 6 06:35 src/
drwxr-xr-x 2 root root 90112 Mar 5 06:27 bin/
drwxr-xr-x 2 root root 12288 Mar 5 06:27 sbin/
drwxr-xr-x 155 root root 4096 Mar 5 06:27 lib/
drwxr-xr-x 50 root root 20480 Feb 20 18:11 include/
drwxr-xr-x 330 root root 12288 Feb 18 16:58 share/
drwxr-xr-x 2 root root 4096 Oct 19 13:51 games/
drwxr-xr-x 3 root root 4096 Jul 19 2016 locale/
drwxr-xr-x 10 root root 4096 Jul 19 2016 local/
似乎删除“ total 156”行。 (如果这是目标,那是一种相当糟糕的方法。不能保证每一行都有一个破折号,这就是grep -
所要查找的。具有完全rwxrwxrwx
权限的文件不会行中没有破折号。)
$ ls -lt | grep - | head -1
drwxr-xr-x 11 root root 4096 Mar 6 06:35 src/
获取先前grep结果的第一行。
$ ls -lt | grep - | head -1 | awk '{print $9}'
src/
打印第九列,即文件名。
小心::这时您可以坚持使用| xargs rm
,但是rm
看起来很危险。不,是吗?不用运行它来查看会发生什么,而是尝试man xargs
来了解xargs rm
的作用。或Google“ xargs rm”:啊哈,这告诉我它将删除正在传递的文件。很高兴知道,我想我会通过。
将所有内容放在一起,您可以将整体结果描述为“按时间倒序列出文件,找到第一个,然后删除它”。换句话说,删除最新文件。这就是整个过程。