Azk*_*erM 5 command-line files
我有一个混合了一堆文件扩展名的目录,我想列出一个特定的文件扩展名(可能类似于grep *.mp3),并在列出时使用输出删除它们。我该怎么做,或者如果有骗子,请随时标记我。
例子:
grep "*.mp3" . | rm -fr
Run Code Online (Sandbox Code Playgroud)
让我们从一个包含三个mp3文件的目录开始:
$ ls *mp3
a.mp3 b.mp3 c.mp3
Run Code Online (Sandbox Code Playgroud)
现在,让我们在列出要删除的内容后删除它们:
$ find . -maxdepth 1 -name '*.mp3' -printf 'Deleting %p\n' -delete
Deleting ./a.mp3
Deleting ./b.mp3
Deleting ./c.mp3
Run Code Online (Sandbox Code Playgroud)
完成后,mp3文件消失了:
$ ls *mp3
ls: cannot access '*mp3': No such file or directory
Run Code Online (Sandbox Code Playgroud)
`找到。
这将启动一个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
Run Code Online (Sandbox Code Playgroud)