我想将给*.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
:名称中包含扩展名的文件