linux - 在文件名中搜索模式列表并复制到目标
问题描述
我有一个模式列表filenames.txt
,我想在文件夹中搜索包含这些名称的文件名。
patterns.txt
:
254b
0284ee
001ty
288qa
我想在文件夹中搜索文件名中包含任何这些模式的文件名,并将所有找到的文件复制到目标目录。
到目前为止,我找到了一个查看文件的解决方案,如下所示:
set -f; find ./ -type f \( $(printf -- ' -o - iname *%s*' $(cat patterns.txt) | cut -b4-) \); set +f
我可以根据文件上的模式找到所有文件patterns.txt
,但是如何将它们复制到新文件夹顶部?
解决方案
假设目标文件夹不需要维护原始层次结构(或者输入目录没有子目录),使用 find、grep 和 xargs 应该可以工作:
find . -type f -print0 |
grep -z -i -F -f patterns.txt |
xargs -0 -s1000 cp -t /new/folder
该序列具有批量复制的优势 - 对于大量文件将是有效的。使用 NUL 分隔文件名应允许文件名中包含任何特殊字符。
推荐阅读
- bash - Docker,CentOS:如何在 bash shell 中使用环境模块自动加载模块?
- python - 如何将来自 url 的音频流直播到传出的 twilio 电话中?
- macos - Vulkan macOS 实例无法加载
- python - 使用 spotipy 在烧瓶会话中存储 Spotify 令牌?
- sql-server - 如何在使用 OPENJSON WITH 时执行字符串函数?
- symlink - WSL:使用 Windows 中的 WSL 符号链接文件夹
- python-3.x - 如何让我的程序知道并响应按下的键
- r - RMarkdown - knitr - png 大小不会改变
- swift - 重载 == 运算符为 != 调用父函数
- php - 如何在 PHPMailer 成功消息中包含 html div 或 php?