【问题标题】:What is wrong in following approach (rm + xargs)以下方法有什么问题(rm + xargs)
【发布时间】:2016-05-04 07:31:43
【问题描述】:

谁能告诉我以下以“#”开头的文件删除方式有什么问题。

目录中的文件:

ola@ola:~/.scratch/hmm$ ls
five  #four  #one  six  #three  #two
ola@ola:~/.scratch/hmm$

ola@ola:~/.scratch/hmm$ ls . |grep "#.*" |xargs rm -rf
ola@ola:~/.scratch/hmm$ ls
five  six
ola@ola:~/.scratch/hmm$

Ps : 参考以下问题询问

Bash: How do I delete all my textfiles starting with #?

【问题讨论】:

  • 为什么需要lsgrep。可以只是rm -- ./#*
  • 你也可以看到我对你之前的问题的类似评论
  • 我做了,我更喜欢你的,因为它很简单,我想知道这是否有什么问题......因为我对 xargs 不是很熟悉,所以我想知道 xargs 是否正确使用或只是巧合,我得到了想要的结果。
  • 您的命令可以运行,但容易出错,因为文件名在 Unix 中可以包含空格字符

标签: linux bash grep xargs rm


【解决方案1】:

ls 可能会在几列中列出文件,并且您的正则表达式也不会锚定到文件名的开头。包含空格的文件名也会有问题。

【讨论】:

  • 啊,现在我明白了。它可以删除任何中间有 # 的文件。以下应该更好 ls 。 |grep "^#.*" |xargs rm -rf
  • 更好,但还不够好。至少,你还需要说ls -1
  • @MichaelVehrs ls 如果其标准输出不是终端,则默认为一列。
  • 至少,BSD 手册页在 -1 的条目中提到了它。 POSIX 规范还强制要求它:“默认格式应是每行列出一个条目到标准输出;例外是终端或指定 -C、-m 或 -x 选项之一时。如果输出是对于终端,格式是实现定义的。”
猜你喜欢
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多