`ls -lt | 的含义是什么? grep- |头-1 | awk '{print $9}' | xargs rm`
What is the meaning of : `ls -lt | grep - | head -1 | awk '{print $9}' | xargs rm`
这条命令的含义是什么:ls -lt | grep - | head -1 | awk '{print }' | xargs rm
。
我知道这些命令的各自含义,但是当我们通过管道连接它们时会发生什么?
查看长管道的作用的一种简单方法是 运行 一次一条。 运行 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 }'
src/
打印第九列,文件名。
小心: 此时你可以继续 | xargs rm
,但 rm
看起来很危险。我们不要,嗯?我不会 运行 看看会发生什么,而是尝试 man xargs
看看 xargs rm
做了什么。或者 google "xargs rm":啊哈,这告诉我它将删除传入的文件。很高兴知道——我想我会通过。
将所有部分放在一起,您可能会将整体结果描述为 "list files in reverse chronological order, find the first, and delete it"。或者换句话说,删除最新的文件。这就是整个事情的作用。
这条命令的含义是什么:ls -lt | grep - | head -1 | awk '{print }' | xargs rm
。
我知道这些命令的各自含义,但是当我们通过管道连接它们时会发生什么?
查看长管道的作用的一种简单方法是 运行 一次一条。 运行 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 }'
src/
打印第九列,文件名。
小心: 此时你可以继续 | xargs rm
,但 rm
看起来很危险。我们不要,嗯?我不会 运行 看看会发生什么,而是尝试 man xargs
看看 xargs rm
做了什么。或者 google "xargs rm":啊哈,这告诉我它将删除传入的文件。很高兴知道——我想我会通过。
将所有部分放在一起,您可能会将整体结果描述为 "list files in reverse chronological order, find the first, and delete it"。或者换句话说,删除最新的文件。这就是整个事情的作用。