查找包含字符串的文件,并将其对应的文件移动到其他目录

lai

我在一个目录中有一些类似的文件

00.01.02 0000 some filename 1.pdf
00.01.02 0000 some filename 1.txt
02.03.07 0163 another filename 2.pdf
02.03.07 0163 another filename 2.txt

而且我必须找到包含特定字符串的所有txt文件,然后将该txt文件及其对应的pdf文件移动到另一个目录。

完成这项工作的最佳方法是什么?

Lu

我为您提供了3种选择,基本思路是:

  1. grep | xargs mv
  2. grep | parallel mv
  3. find -exec grep -q -exec mv

1。 grep | xargs mv

使用grepxargs

grep -FlZ "some string" *.txt \
| xargs -0 -I{} sh -c 'echo mv "$1" "${1%.*}.pdf" some/other/directory' xargs-sh {}

grep

  • -F 匹配完整的字符串,而不是模式
  • -l 仅输出匹配的文件名
  • -Z 在文件名之间输出零分隔符(这很重要,因为允许文件名包含换行符,所以您不能依赖换行符作为分隔符)

xargs

  • -0 读取零分隔数据

2。 grep | parallel mv

随着xargs您需要调用使用一个子shellsh -c能够得到相应的PDF格式的文件名。

除了这样做,您还可以使用一些GNU parallel很酷的功能!

grep -FlZ "some string" *.txt \
| parallel -0 -j1 echo mv {} {.}.pdf some/other/directory
  • -j1 一次只做一份工作
  • {} 文件名
  • {.} 没有扩展名的文件名

3。 find -exec grep -q -exec mv

另一种选择是,使用find

find . -maxdepth 1 -name "*.txt" \
-exec grep -Fq "some string" {} \; \
-exec sh -c 'echo mv "$1" "${1%.*}.pdf" some/other/location' find-sh {} \;
  • -maxdepth 1 不递归
  • grep -q为了仅获取错误代码而不是文件名,第二个-exec仅在第一个成功的情况下运行。
  • 第二个-exec基本上与xargs第一个选项中的相同
  • 我们不需要执行任何以零分隔的输出操作,因为我们不传递任何文件名,find而是由它来处理。

对于每个选项,echo如果对输出感到满意,请删除

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用python查找PDF和DOC文件并将其移动到其他目录

如何查找特定文件并将其移动到特定目录?

如何以循环方式压缩文件并将其移动到其他目录?

如何使用批处理根据状态检查日志文件中的字符串并将文件移动到其他文件夹

用于在文件中查找文件名并将其移动到不同目录的 Powershell 脚本

执行.bat文件并将其移动到其他文件夹的脚本

查找包含特定字符串的行并将其添加到新文件中

查找包含文件名中的字符串和文件中其他字符串的文件?

需要遍历文件夹并将文件移动到其他目录吗?

如何遍历目录并将特定文件移动到其他文件夹

删除字符并将其移动到字符串中

删除文件名的字符串,并将其他字符串保留在BASH中

将 /home 保留在 HDD 上并将其他文件移动到 SSD 中

查找比在目录中创建其父文件夹更早的文件并将其移动到该目录中

使用find和grep从文件中查找包含某些字符串但不包含其他字符串的行

Linux命令如何查找包含某些字符串但不包含其他字符串的文件?

压缩文件并将其移动到相应目录

查找文件名中包含空格和特定字符串的文件,并将其重命名

Bash:查找包含特定字符串的文件并将其复制到文件夹中

如何使用“ stat”检测新文件,然后将其移动到其他目录?

如何查找包含“字符串A”而不包含“字符串B”的文件,并将其名称输出到文件中?

使用CSV文件将文件移动到其他目录

在文件中循环查找字符串,并将包含该字符串的文件发送到bash中具有相同名称的目录

将 x 个文件移动到其他目录

查找字符串中的单词并将其移动到句子的末尾。Python3.x

Python 在字符串中查找模式并将其替换为列表中的其他模式字符串

如何读取包含在特定标签中的字符串并将其替换为其他字符串?

删除包含数字的字符串并将其他字符串转换为大写并用逗号分隔

如何在文件中查找字符串并将其放置在文件上方?