如何通过 grep 关键字将多个“.gz”文件从子目录复制到一个目录?

如何通过 grep 关键字将多个“.gz”文件从子目录复制到一个目录?

我需要一个命令将多个目录中的文件复制到一个目录 (/home/c/),这些目录都包含“ZA*3094~”。请注意,文件采用压缩格式 (gz)。

例如:/home/a/20180901/file.gz /home/a/20180902/file1.gz /home/a/20180903/file2.gz /home/a/20180903/file3.gz

答案1

您可以使用 fo 循环

IFS=$'\n'; for i in $( find <source_directory> -type f | grep '.gz$'); do echo cp \"$i\" \"<destination_directory>\"; done

更换<source_directory><destination_directory>

  • IFS 将防止将包含空格的路径拆分为多行
  • find with-type f将仅返回文件
  • grep 将过滤以以下结尾的文件.gz
  • echo对于试运行,如果一切正常,只需删除回声

答案2

zgrep命令应该有帮助,我有这个例子

mv $(find a/*/* -type f -name "*.gz" -exec zgrep -l 'nob' {} \;) /tmp

该命令执行以下操作:

  • zgreplikegrep使用-l选项返回包含搜索词的文件名nob
  • mv $(find a/*/* -type f -name "*.gz" -exec zgrep -l 'nob' {} \;) /tmp会将所有返回的带扩展名的文件移动.gz/tmp文件夹

相关内容