我该如何编写脚本来循环遍历硬盘上的每个文件夹,查找任何视频文件,将它们提取到硬盘的根目录,然后删除其他所有内容?
答案1
通常,如果您需要在 Linux 中“循环”一组文件,您不想编写实际的 Bash 循环(例如使用for
),而是使用find
。以下内容适用于所有版本的find
,并且 Linux 发行版附带 GNU find
,谁的手册你绝对应该在某个时候读一读。
请谨慎使用以下命令。如果你不知道自己在做什么,或者没有先检查结果,你可以不可逆转地丢失数据。
寻找/安装/驱动器-type f \(-iname“* .mp4”-o-iname“* .avi”\)\ -exec 回显 mv'{}'/安装/驱动器/\;
这将打印命令列表mv
。一旦您确定它执行了您想要的操作,请echo
从命令中删除并再次执行它。
笔记:
-type f
将限制结果仅限于文件。find
将会覆盖同名文件,且不会发出警告。为避免冲突,请使用mv -i
,这样在这种情况下会提示您。- 您可以添加更多条件来搜索其他文件类型,例如
-o -iname "*.mov"
等等。
第二步,我们将删除驱动器根目录中不存在的所有内容。为此,我们需要两个命令,因为您首先要删除所有文件……
寻找/安装/驱动器-mindepth 2 -类型 f
确定列出了要删除的所有内容后,将其添加-delete
到命令中。这样mindepth 2
可确保您的根目录(包含其中的所有视频)保持不变。
然后,找到剩余的空文件夹:
寻找/安装/驱动器-mindepth 1-深度-类型 d-空
与上面类似,添加-delete
此命令即可实际删除空目录。