Skip to content

Instantly share code, notes, and snippets.

@cicihu
Created September 21, 2013 14:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cicihu/6651332 to your computer and use it in GitHub Desktop.
Save cicihu/6651332 to your computer and use it in GitHub Desktop.
在命令行下删除除去指定目标以外的所有目标

假设在某路径下有 a.txt, b.txt, c.txt, d.txt, e.txt 五个文件,如何在保留特定某个的前提下删除其余的?

$ ls * | grep -v c.txt | xargs rm -f

grep -v-v--invert-match 即指定排除条件;

xargs:从 standard input 读取参数并以 spacetabnewlineend-of-line 作为分界符来分隔这些参数;然后传给它的参数——可以是一个处理命令。

所以以上的命令分析一下即:

  1. ls * 列出当前路径下所有文件;
  2. grep -v 进行筛选,条件是排除 c.txt 项;
  3. xargs 分隔 grep 传来的结果进而得出除了 c.txt 的其他四个文件(实际上分解出的参数不止四个文件名,但不影响后面的操作);
  4. rm -f 处理收到的结果,完工。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment