【问题标题】:bash on Linux, delete files with certain file extensionLinux上的bash,删除具有特定文件扩展名的文件
【发布时间】:2013-05-21 08:12:37
【问题描述】:

我想删除文件夹及其子文件夹中具有特定扩展名 - “.fal”的所有文件,但名为“*Original.fal”的文件除外。问题是我想删除其他具有相同扩展名的文件:

  • *Original.fal.ds
  • *Original.fal.ds.erg
  • *Original.fal.ds.erg.neu

我还想删除其他“.fal”,它们中没有“Original”。 名字一直在变化,所以我不能删除特定的名字。 *Original.fal 没有变化。

我只能到这里:

$find /disk_2/people/z183464/DOE-Wellen -name "*.fal" \! -name "*Original.fal" -type f -exec echo rm {} \;

如果该命令只能在它被调用(执行)的文件夹(及其子文件夹)中删除,那就太好了

当我运行代码时,它给了我一个错误:

  1. /disk_2/people/z183464/DOE-Wellen:是一个目录

【问题讨论】:

  • 重命名你不想删除的文件,然后做一个简单的rm,然后再重命名文件。
  • 您的find 解决方案应该可以正常工作。错误消息似乎只是因为您在两行上键入了单行。 -type f-stuff 应该与上面的东西在同一行,然后它应该起作用。提示:在没有echo 的情况下实际执行它之前,使用-exec echo rm {} \; 查看它做什么。
  • 是的,我回到了第一行,但第一个错误仍然存​​在。我该如何做同样的事情,而不指定文件夹,而是在它正在执行(调用)的文件夹中执行它
  • 除了其他人给出的指示之外,我想指出:“.fal”不是你想要的。获取以 .fal 结尾的文件。换句话说,只有*Original.fal 会匹配。您可能想要“.fal.*”,它实际上会获取所有包含“.fal.”的文件。 -- IOW,它将选择您列出的所有项目,但不会选择“*Original.fal”。

标签: linux bash file delete-file


【解决方案1】:

如果您不想让find 下潜太深,可以使用-maxdepth 限制它。

【讨论】:

  • @Vihar:嗯,问题变了:-) 感叹号必须反斜杠,它是 bash 中的特殊字符(与历史扩展有关)。
  • 是的,它确实改变了 :) 我在感叹号之前和之后都尝试过使用 \ - 仍然一样......
  • @Vihar:在感叹号引用空格后加上反斜杠。在应该足够之前。
  • 我说我都试过了。我有一个错误,将 -type 放在下一行,所以第二个错误现在消失了。但第一个与感叹号前的反斜杠保持一致。
  • @Vihar:将-type 条件移到否定之前。
【解决方案2】:

您可以为此使用一个简单的 for 循环。此命令显示您可能要删除的所有文件。用 rm 更改 echo 以删除它们。

cd /disk_2/people/z183464/DOE-Wellen && for I in `find . -name "*.fal" ! -name "*Original.fal"`; do echo $I; done

如果您需要更大的灵活性,您也可以使用“find ... | grep ...”来使用正则表达式。

【讨论】:

  • 当我运行它给我的代码时:/disk_2/people/z183464/DOE-Wellen: is a directory
猜你喜欢
  • 1970-01-01
  • 2015-02-01
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
相关资源
最近更新 更多