删除在生成输出时被过滤的列表

删除在生成输出时被过滤的列表

我有一个目录,里面有一堆文件扩展名,我想列出一个特定的文件扩展名(可能类似于grep *.mp3),并在列出时删除它们并输出。我该怎么做,或者如果有重复的,请随时标记我。

例子:

grep "*.mp3" . | rm -fr 

答案1

让我们从包含三个文件的目录开始mp3

$ ls *mp3
a.mp3  b.mp3  c.mp3

现在,列出要删除的内容并删除它们:

$ find . -maxdepth 1 -name '*.mp3' -printf 'Deleting %p\n' -delete
Deleting ./a.mp3
Deleting ./b.mp3
Deleting ./c.mp3

完成此操作后,mp3文件就消失了:

$ ls *mp3
ls: cannot access '*mp3': No such file or directory

怎么运行的

  • `查找。

    这将启动一个find命令。它将在当前目录中查找文件.

  • -maxdepth 1

    默认情况下,find递归搜索子目录。这告诉它不要这样做。使用-maxdepth 1,命令find将仅查看它在当前目录中找到的内容,而不会探索当前目录的任何子目录。

  • -name '*.mp3'

    这告诉 find 仅查找具有.mp3扩展名的文件。

  • -printf 'Deleting %p\n'

    这告诉 find 打印有关找到的每个文件的消息。

    当然,如果您愿意,可以将其更改为其他消息。如果您不想要消息,则可以完全省略此选项。

  • -delete

    这告诉 find 删除每个文件。

不区分大小写的搜索

如果您还想查找名为.MP3.Mp3等的文件,那么我们需要不区分大小写的搜索,我们使用-iname

find . -maxdepth 1 -iname '*.mp3' -printf 'Deleting %p\n' -delete

答案2

你要find...

find . -type f -iname "*.mp3"

默认情况下,它会递归到子目录,因此如果您获取的文件多于您想要的文件,请添加-maxdepth 1仅在当前目录中搜索。检查输出是否是您想要删除的内容后,您可以再次执行此操作(谢谢向上箭头...)并添加-delete

find . -type f -iname "*.mp3" -delete

.是当前工作目录 - 如果您不在该目录中,您可以在这里给出该目录的路径......

为了使其具有交互性,您可以使用-exec定义自己的动作而不是find-delete动作

find . -type f -iname "*.mp3" -exec rm -i -- {} \;

然后它会在删除每个文件之前提示您......

答案3

当您只想删除当前目录中的项目时,使用通配符就足够了,如下所示:

$ ls *.jpeg
birthday2016_001.jpeg  birthday2016_002.jpeg  birthday2016_003.jpeg
$ rm *.jpeg
$ ls *.jpeg
ls: cannot access '*.jpeg': No such file or directory

如您所见,在上面的示例中,所有带有.jpeg扩展名的文件都被删除了。列出它们,是同样的想法 -echo *.jpegls *.jpeg。因此,您基本上可以简单地ls *.mp3 && rm *.mp3针对您的情况进行操作

Python替代方案:

就我而言,我正在删除.jpeg文件,因此根据需要调整下面的代码:

 python -c 'import os,sys;[(sys.stdout.write(i + "\n"),os.unlink(i)) for i in os.listdir(".")  if i.endswith(".jpeg")]'

示例运行:

$ ls *.jpeg
birthday2016_001.jpeg  birthday2016_002.jpeg  birthday2016_003.jpeg     
$ python -c 'import os,sys;[(sys.stdout.write(i + "\n"),os.unlink(i)) for i in os.listdir(".")  if i.endswith(".jpeg")]'
birthday2016_003.jpeg
birthday2016_001.jpeg
birthday2016_002.jpeg
$ ls *.jpeg
ls: cannot access '*.jpeg': No such file or directory

相关内容