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对您来说可以防止覆盖。