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

Mid*_*ddi 9 command-line find

我想将所有*.txt文件从位于给定目录中的所有子目录移动到一个目标目录。

执行以下操作时,它会移动每个文件 - 如何将其减少到所有*.txt文件?

find -type f -print0|xargs -0r mv -it "/path to my folder/destination-directory"
Run Code Online (Sandbox Code Playgroud)

hee*_*ayl 11

在您的情况下,使用带有-name选项的glob 模式find来指示所需的模式*.txt

find . -type f -name '*.txt' -exec mv -t /destination {} +
Run Code Online (Sandbox Code Playgroud)

当然,替换/destination为实际的目标目录。

笔记:

  • 您不需要生成xargs和匿名管道,请使用谓词中的mv逻辑-execfind

  • find ... -exec处理所有可能的文件名ARG_MAX以及

  • GNU mv(Ubuntu 中的默认值)必须-t采用目标目录,以便您可以利用 的+参数-exec在单次运行中发送所有文件mv(或者如果ARG_MAX在进程中触发,则至少运行最少)


Zan*_*nna 6

添加-name测试

find -type f -name "*.txt" -print0 |...
Run Code Online (Sandbox Code Playgroud)

不要忘记引用 glob 以防止 shell 扩展。

对于不区分大小写的搜索,使用-iname代替-name