在目录中的文件中查找字符串,然后将整个文件移动到新文件夹

在目录中的文件中查找字符串,然后将整个文件移动到新文件夹

首先我要说明的是,我对 bash 和 Linux 还很陌生,所以任何帮助对于你来说都是巨大的,哪怕只是一些对你有用的入门技巧。

我遇到的问题是我正在处理一堆目录和子目录。我正在尝试 grep 一行。

grep 'Relaxed' */*

它并不优雅,但它为我提供了一个目录列表,其中包含一个包含行 Relaxed 的文件(在我的情况下,它是电子结构预测计算的输出)。我有大约 100 多个这样的目录,因此要筛选出哪些目录已完成哪些目录尚未完成,这很繁琐。

我希望得到的帮助是一种搜索每个目录的方法,以及当字符串例如:

松弛原子坐标(分数):

在该目录中的文件(一行轻松就足以识别)中找到,使用 for 循环或其他方法将整个目录移动到完成堆(另一个目录)中,并将未完成的目录保留在目录中。这样我就会有一堆“完成”的目录和可以重新运行的未触及的目录。

再次感谢任何帮助,如果有什么令人困惑的地方我可以澄清。

谢谢你!

答案1

grep -rl 'Relaxed' | xargs dirname | xargs  mv -vt donedirectory

慢动作:

  • grep -rl 'Relaxed'搜索所有文件并打印出它们的名称。如果它们都在当前目录的第一级子目录中,grep -l 'Relaxed' */* 也可以使用。
  • xargs dirname调用dirname该输出的每个文件来打印出目录名称
  • xargs mv -v -t donedirectory将所有结果目录移动到目标目录。

如果在同一目录中找到多个带有“Relaxed”的文件,则可以通过使目录名称唯一来避免出现错误消息:

grep -rl 'Relaxed' | xargs dirname | sort -u | xargs  mv -vt donedirectory

注意:上述命令假设文件/目录名称中不存在任何错误(空格等)。

相关内容