这个命令的含义是什么:ls -lt | grep - |头-1 | awk’{print $ 9}’| xargs rm。
我知道这些命令的个别含义,但是当我们通过管道加入它们时会发生什么?
查看长管道的简单方法是一次运行一个。跑 ls -lt , 然后 ls -lt | grep - , 然后 ls -lt | grep - | head -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 flag表示文件按修改时间排序,从最新到最旧。
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/
似乎删除了“总156”行。 (如果这是目标,那么这是一个相当糟糕的方法。不能保证每条线都有一个破折号,这就是 grep - 在寻找。一个文件已满 rwxrwxrwx 权限在行中不会有破折号。)
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 确实。或谷歌“xargs rm”:啊哈,告诉我它会删除传入的文件。很高兴知道 - 我想我会通过。
| xargs rm
rm
man xargs
xargs rm
将所有部分放在一起,您可以将整体结果描述为“按逆时间顺序列出文件,找到第一个,然后删除它”。或者换句话说, 的 删除最新的文件 强> 。这就是整个事情的作用。