跳到主要内容

一个 Xargs 使用场景

· 阅读需 2 分钟

想象你的 Terminal 已经在你的工作目录了,然后你从浏览器下载了一个东西,它自动放在了 ~/Downloads 目录下

好吧,我太笨了,根本不知道刚刚下载的文件叫什么乱七八糟的名字,也不想 cd 过去找它

这时候我会用下面这个命令把它直接挪过来,不管它叫什么名字(当然,你可以把它变成一个 alias, 方便使用)

ls -t ~/Downloads | head -n 1 | xargs -I {} cp ~/Downloads/{} .

下面我来逐一解释命令的每一部分:

  • ls -t ~/Downloads: 这个命令会列出 ~/Downloads 目录中的所有文件,并根据修改时间排序,最新修改的文件排在最前面。

  • |: 这个符号被称为管道符,它用来将一个命令的输出作为另一个命令的输入。

  • head -n 1: 这个命令会取前一个文件名(因为它们是最新修改的文件)。

  • |: 再次使用管道符,将 head 命令的输出传递给 xargs

  • xargs -I {} cp ~/Downloads/{} .: 这里 xargs 接受 head 命令的输出(即文件名)作为输入,并对每个输入执行 cp 命令。 -I {} 选项告诉 xargs{} 作为替换字符串,命令中的每次出现 {} 都会被替换为输入行。所以 cp ~/Downloads/{} . 会被替换为 cp ~/Downloads/file1 .,其中 file1 是从 ~/Downloads 目录中选出的最新修改的文件。