Answers:
{}
从中删除mv
,mv
将忽略所有父目录,将其作为目标目录:
find -type f -exec mv {} collection/ \;
-maxdepth 1
会有所帮助。
find -type f -print0|xargs -0r mv -it colection/
除了使用find
(可以很好地完成工作)之外,您还可以使用外壳来达到此目的。
假设您要从$ PWD到$ DEST的所有文件。自然的尝试是:
mv $PWD/* $DEST
这是如何运作的?表达式“ $ PWD / *”扩展为该目录中所有文件的名称。这个外壳功能称为“ globbing”。的最后一个参数mv
是目标目录。如果文件太多,则此操作将无效,因为命令行的长度受到限制。
但是该解决方案存在一个问题,即它省略了点文件-或名称以“。”开头的“隐藏”文件,文件和目录。为了解决这个问题,您必须告诉您的外壳在遍历时包含点文件。为此,请使用
shopt -s dotglob
使用时bash
(bash
除非更改了默认值,否则您可能会使用)。在此Shell中,上述命令也适用于点文件。
顺便说zsh
一句,在中,您可以选择根据情况选择此选项。为此,请放
setopt extendedglob
在你的.zshrc
。那你可以用
mv $PWD/*(D) $DEST
移动所有文件,包括点文件。(“ D”的作用是暂时启用“ GLOB_DOTS”选项)。
现在,最初的问题是将所有常规文件(而非目录)从所有子目录及其子目录移动到单个目录。这可以通过以下方式完成zsh
:
mv $PWD/**/*(D.)
这里的表达式**/*
使globeb递归地下降到子目录中。该D
“也选择点文件;手段.
的意思是‘只有选择正规的文件,不是目录’。
find -type f -exec mv -t collection/ {} +
。请查阅手册页以了解其工作原理。