从目录及其所有子目录移动文件类型的好方法是什么?
就像“将 /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/{} \;
这将保留目录结构。