如何在 RHEL 命令行中查找特定类型的所有文件?

如何在 RHEL 命令行中查找特定类型的所有文件?

我正在寻找 、 等类型.flv.avi文件

我想查看(我的服务器上)这些文件类型的所有文件的列表(我不介意逐个执行此操作,即查看的所有文件.flv,然后查看的所有文件.avi)。

然后,一旦我确定了想要移动的文件,如何将分散在整个文件系统中的几个文件复制到特定的文件夹中?

答案1

在 GNU/Linux 系统上有多种方法可以搜索文件。两种主要方法是locatefind

  • locate使用整个系统中已知的文件数据库来查找文档。它非常有用,但需要保持此数据库的更新(使用updatedb),这可能需要很长时间;
  • find在给定目录中搜​​索文件。它通常比 慢locate(因为它没有持久数据库)但更精细。

因此,如果您需要查找系统上符合条件的所有文件,您可以使用locate

$ locate --regex "avi|flv" | grep '\.\(avi\|flv\)$'

而如果你在特定目录中搜​​索并且想要确保没有缓存延迟效应,则可以使用find

$ find /path/to/your/directory -regex '.*\.\(avi\|flv\)'

现在,将这些文件复制到特定文件夹:

$ locate --regex "avi|flv" | grep '\.\(avi\|flv\)$' | xargs cp /path/to/specific/folder

或者

$ find /path/to/your/directory -regex '.*\.\(avi\|flv\)' -exec cp {} /path/to/specific/folder \;

答案2

扩展 Raphnik 的评论,您可以通过将其放入locate或find命令的正则表达式部分来节省通过grep的管道:'\.avi$|\.flv$'——它将匹配扩展名为.avi和.flv的文件。

答案3

使用 find -exec 或 xargs 来实现这一点可能有更优雅的方法,但这里有一个快速的破解方法:

updatedb 

然后

for fred in `locate *.flv | awk ' { print $1 } '` do;
mv "$fred" /my/dest/folder/
done

(ETC)

相关内容