我需要一个命令将多个目录中的文件复制到一个目录 (/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
该命令执行以下操作:
zgrep
likegrep
使用-l
选项返回包含搜索词的文件名nob
mv $(find a/*/* -type f -name "*.gz" -exec zgrep -l 'nob' {} \;) /tmp
会将所有返回的带扩展名的文件移动.gz
到/tmp
文件夹