问题描述
我在路上:
/myuser/downloads/
我创建了一个子文件夹:
/myuser/downloads/new
现在我想将下载文件夹中的所有文件和文件夹/sub-folders移动到sub-folder。
我怎样才能做到这一点?
我试过了:
mv -R *.* new/
但是看起来移动并没有采用-R开关。
最佳解决思路
命令
mv !(new) new
应该做的伎俩。如果不起作用,请先运行shopt -s extglob
。
要同时移动隐藏文件/目录(以点开头),请先运行shopt -s dotglob
。所以,总结一下:
shopt -s extglob dotglob
mv !(new) new
shopt -u dotglob
(最好不要设置dotglob
以避免不良意外)。
次佳解决思路
我发现了类似的东西,但理解起来有点简单,它也可能适合你:
ls | grep -v new | xargs mv -t new
在上述解决方案中添加说明:
从手册页:
-
mv -t
-t, --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY
-
grep -v
-v, --invert-match Invert the sense of matching, to select non-matching lines.
按步骤说明:
-
ls
将列出当前目录中的文件 -
grep -v new
将返回管道,这与新的不匹配 -
xargs mv -t new
将从grep -v
移动到它的文件到目标目录
第三种解决思路
简单的想法。假设您在/myuser中,将下载重命名为new,创建一个新的下载目录,然后将其移入新目录。
mv downloads new # downloads is now called new
mkdir downloads # create new directory downloads
mv new downloads # move new into it.