我正在寻找 、 等类型.flv
的.avi
文件
我想查看(我的服务器上)这些文件类型的所有文件的列表(我不介意逐个执行此操作,即查看的所有文件.flv
,然后查看的所有文件.avi
)。
然后,一旦我确定了想要移动的文件,如何将分散在整个文件系统中的几个文件复制到特定的文件夹中?
答案1
在 GNU/Linux 系统上有多种方法可以搜索文件。两种主要方法是locate
和find
:
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)