![如何将文件从具有给定扩展名的子目录递归移动到目标文件夹?](https://linux22.com/image/1145808/%E5%A6%82%E4%BD%95%E5%B0%86%E6%96%87%E4%BB%B6%E4%BB%8E%E5%85%B7%E6%9C%89%E7%BB%99%E5%AE%9A%E6%89%A9%E5%B1%95%E5%90%8D%E7%9A%84%E5%AD%90%E7%9B%AE%E5%BD%95%E9%80%92%E5%BD%92%E7%A7%BB%E5%8A%A8%E5%88%B0%E7%9B%AE%E6%A0%87%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%9F.png)
我想将给*.txt
定目录中所有子目录中的所有文件移动到一个目标目录。
当按如下方式执行时,它会移动每个文件 - 我怎样才能将其减少到*.txt
仅所有文件?
find -type f -print0|xargs -0r mv -it "/path to my folder/destination-directory"
答案1
根据您的情况,使用带有-name
选项的glob 模式find
来指示所需的模式:*.txt
find . -type f -name '*.txt' -exec mv -t /destination {} +
当然,/destination
用实际的目标目录替换。
笔记:
您不需要生成
xargs
和匿名管道,使用谓词mv
内的逻辑-exec
find
find ... -exec
处理所有可能的文件名,ARG_MAX
以及GNU
mv
(Ubuntu 中的默认设置)必须-t
采用目标目录,以便您可以利用的+
参数-exec
在单次运行中发送所有文件mv
(或者至少ARG_MAX
在过程中触发时发送最少的运行)
答案2
添加-name
测试
find -type f -name "*.txt" -print0 |...
不要忘记引用 glob 以防止 shell 扩展。
对于不区分大小写的搜索,请-iname
使用-name
答案3
find /folder/ -type f -name "*.txt" -exec mv {} /other/folder/ \;
我测试过了,效果很好。
答案4
使用原始命令:
find . -type f -name "*.txt" -print0|xargs -0r mv -it /path/to/destination
信息:
.
:在当前位置搜索"*.txt"
.txt
:名称中包含扩展名的文件