如何找到文件名(或正文)中包含字符串的一堆文件,然后将所有这些文件移动到特定文件夹?

如何找到文件名(或正文)中包含字符串的一堆文件,然后将所有这些文件移动到特定文件夹?

假设 - 如果我想将几个独立目录中的文件名中包含“heavengames”一词的每个 HTML 文件(作为第二个问题,正文中包含“heavengames”一词的每个 HTML 文件)移动到名为的新目录,该怎么办? “天堂游戏线程”?

答案1

要移动名称中包含该单词的文件:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -iname "*heavengames*" \
-exec mv -t /path/to/heavengames-threads {} \+

要移动正文中包含 word 的文件:

find /path/to/dir1 /path/to/dir2 /and/so/on -type f -exec grep -q heavengames {} \; \
-exec mv -t /path/to/heavengames-threads {} \+

附注要检查一切是否正确,请在第一次运行时添加echobefore 。mv

答案2

在 zsh 或 bash ≥4 中,根据文件名:

mkdir heavengames-threads
mv **/*heavengames*.html heavengames-threads/

为了获得更大的灵活性(例如,要重新创建目录层次结构,请查找zmv(有这个网站上有很多例子)。

用于grep搜索文件内容。使用最新版本的 GNU 实用程序(即在非嵌入式 Linux 或 Cygwin 上):

grep -RZ heavengames . | xargs -0 mv -t heavengames-threads/

对于更便携的命令,请使用find.看拉什的回答

相关内容