我有一个有很多文件和目录的目录。 为了整理它,我将把所有这些文件放到一个目录中,所以我打算做这样的事情:
$ ls | wc -l 123 $ mkdir new_directory $ mv * ./new_directory
然而,这显然不会工作,因为那么它会尝试将new_directory移动到new_directory 。 是否有一些简单的方法来做我想要的一行,而不必复制和粘贴该目录中的所有文件和目录?
你的
mv * ./new_directory
命令将实际上工作; 它只会打印一个警告,它不能将该目录移动到自身。
一个快速和肮脏的线上。
mv `ls -A | grep -v new_directory` ./new_directory
如果你只是在寻找文件(即不是目录),那么
find . -type f -maxdepth 1 -exec mv {} ./new_directory/ \;
是最便携的解决scheme。 对于速度,你应该移动find和xargs,-print0和-0,但前提是你有GNU find和xargs。
我遇到这个问题的时候,我做了以下一件事情:
$ mkdir ../new-directory $ mv * ../new-directory/ $ mv ../new-directory .
要么
$ mkdir .new-directory $ mv * .new-directory/ $ mv .new-directory new-directory
第二种forms利用以“。”开头的通配符跳过文件名。
关于什么:
cd .. mv old_dir new_directory mkdir old_dir mv new_directory old_dir
IOW,不要把内容移动到一个新的目录中,而是把这个目录放在一个新的目录中。
与@ Rembrane的回答类似(尽pipe不是单行):
for FN in * do if [ "<new_dir>" != $FN ] then mv $FN <new_dir> done
这应该是100%便携式 – 即使find是可悲的缺席您的系统。
我的build议:正如别人所说的
mv * ./new_directory
将工作findIFF的总扩张足够短。
其他方面,你可以尝试这个扩展到更大数量的文件:
find . -type f -maxdepth 1 | xargs -s100000 echo | xargs -iXXX mv XXX new_directory
说明
使用:
find -mindepth 1 -maxdepth 1 \! -name new_directory -print0 | \ xargs -0 -P 100 -I'{}' mv '{}' new_directory
从xargs手册页:
-P max-procs
Run up to max-procs processes at a time;
为了避免错误信息并保持简单:
mv *.* ./new_Folder
会做同样的事情,但避免错误信息(除非你在我猜的文件夹名称中有点)。