如何按类型递归地将文件从目录及其子目录移动到另一个目录?

如何按类型递归地将文件从目录及其子目录移动到另一个目录?

从目录及其所有子目录移动文件类型的好方法是什么?

就像“将 /thisdir 中的所有 *.ogg 递归移动到 /somedir”。我尝试了几件事;我最大的努力是(仍然不是那么好):

find /thisdir -type f -name '*.ogg' -exec mv /somedir {} \;

它在每个文件名之前的每一行返回,

mv: cannot overwrite non-directory `/thisdir/*.ogg' with directory `/somedir'

答案1

你可以使用 find 与参数为了这

find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -Imysongs mv -i mysongs /somedir

上面命令中的 -I 告诉 xargs 您要使用什么替换字符串(否则它将参数添加到命令末尾)。

或者
在您的命令中,尝试在mv命令后移动“{}”。

find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;

答案2

在 zsh 或 bash 4 中,将所有*.ogg文件收集到/somedir

mv /thisdir/**/*.ogg /somedir

如果您想重现目录层次结构:(警告,直接在浏览器中输入)

rsync -a --prune-empty-dirs --include='*/' --include='*.ogg' --exclude='*' /thisdir /somedir

答案3

find /thisdir -type f -name "*.ogg" -exec mv {} /somedir \;

你有点互换了 mv 的参数

答案4

我收到“目录不为空”错误。为了解决这个问题,我运行:

find . -name 'node_modules' -type d -prune -exec mkdir -p ./another/dir/{} \; -exec mv -i {} ./NODE_MODULES/{} \;

这将保留目录结构。

相关内容