如何将文件从具有给定扩展名的子目录递归移动到目标文件夹?

如何将文件从具有给定扩展名的子目录递归移动到目标文件夹?

我想将给*.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内的逻辑-execfind

  • 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

信息:

  1. .:在当前位置搜索

  2. "*.txt".txt:名称中包含扩展名的文件

相关内容