Answers:
命令
mv !(new) new
应该可以。如果不起作用,shopt -s extglob
请先运行。
要还移动隐藏的文件/目录(以点开头),也shopt -s dotglob
请先运行。
因此,总结一下:
shopt -s extglob dotglob
mv !(new) new
shopt -u dotglob
(最好设置dotglob
为避免出现意外情况)。
!(something)
吗?
dev
到当前位置,我是否必须执行mv !(dev) dev
?我知道了-bash: !: event not found
setopt extendedglob
在zsh中设置扩展的glob模式。^
是排除符号,因此mv ^new new
可以解决问题。然后查看可以在zsh中使用的所有选项,setopt
并禁用扩展的glob模式,可以这样做unsetopt extendedglob
我发现了类似的内容,但比较容易理解,它也可能对您有效:
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
到目标目录mv: illegal option -- t
。这是因为我正在使用zsh
吗?
mv
(这意味着您使用的mv版本与我使用的版本不同)您使用的是什么操作系统?我相信当我写这个答案时,我在Linux发行版上centos
使用bash
。
mv: illegal option -- t
,这是因为osx的mv没有-t
选项。
zsh
,所以可能是OS。感谢您的澄清!
如果要将所有文件从文件夹移动到其子文件夹之一,则可以使用以下命令:
find /myuser/downloads/ -type d -name 'new' -prune -type f | xargs mv -t /myuser/downloads/new
它将找到所有文件,然后将它们移动到您的子文件夹。
@waltinator:已添加-type d -name 'new' -prune
以防止遍历/myuser/downloads/new
。
new
并试用了此命令,我得到mv: missing file operand
和Try 'mv --help' for more information
您可以尝试这个替代过程–留在原路
/myuser/downloads/
但是,而不是先建立/myuser/downloads/new/
目录,而不是在创建一个文件夹/myuser/
目录,用命令mkdir ../new
,然后将所有文件downloads
到new
,终于移动new
到downloads
。您可以在/myuser/downloads/
路径中使用以下命令在一行中完成此操作:
mkdir ../new && mv * ../new && mv ../new ../downloads
在这种情况下,您不必担心文件/文件夹的任何“过滤”,因为new
它与路径处于同一级别downloads
,因此您可以将所有内容downloads
移至new
,然后移至new
下载目录。
但是,如果您已经new
创建了子文件夹,并且不想创建另一个子文件夹,请不要担心–只需将上面显示的命令中mkdir
第一个文件夹左侧的命令更改&&
为一个mv
命令,然后将其new
向上推即可。路径; 换句话说,当您仍在时/myuser/downloads/
,可以更改mkdir ../new
为mv new ..
。然后new
[路径中的/myuser/downloads/new/
] 子文件夹被推到/myuser/new/
与相同级别的/myuser/downloads/
,然后您可以运行如上所示的其余命令。总而言之,我们从路径开始/myuser/downloads/
:
mv new .. && mv * ../new && mv ../new ../downloads
并且,由于您要“将下载文件夹中的所有文件和文件夹/子文件夹移动到子文件夹[ new
]”,因此您已完成!如果你本来想移动只有文件(或仅文件夹或[插入更多的颗粒状物体的运动]),那么你就必须使用其他命令,可以“过滤器”对象,如grep
。不过,上面编写的命令足以满足您的目的。
mv * new
尽管,它会发牢骚“无法从新到新”或类似的东西。也许mv -i * new
对您来说可以防止覆盖。