把当前目录java文件夹里面除 jdk1.8.0_151 这个目录外的其他文件或目录移到 当前目录下的 jdk1.8.0_151目录中来的命令可以用
find ./ -maxdepth \1 \! -name jdk1.8.0_151 -exec mv {} ./jdk1.8.0_151/ \;
其中,\! -name 后面是文件名或目录名,\!表示对!进行转义表示不等于
该命令要手动输入,或者复制到notepad后用unix格式保存才可以复制粘贴到命令行不然会报下面的错
find: 路径必须在表达式之前: -exec
用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
- -maxdepth 搜索文件夹的最大深度,值为1则仅搜索当前目录下的文件夹,不去搜索子文件夹
- \! 这里面!表示搜索除了后面-name指定的文件/目录名之外的文件/目录,\表示对!的转义
- -name指定文件名`
- exec 是find命令的一个选项,表示执行后面的shell命令,以;结尾。其中\;里面的\同样表示对;的转义
- {}表示exec命令前面的find命令执行的结果。exec命令会将{}代表的内容作为命令参数集,并且对每一个参数单独执行一次exec后面的命令。
注意
- exec和使用管道|以及使用管道加xargs(即| xargs)有类似的用途,都可以根据前面命令的结果继续执行下面的命令,但是三者有着很大的区别,具体参考shell之xargs与-exec,与管道的区别。现简单表示为以下:
- 使用管道| command,将管道前的命令结果,以标准输入的形式,传递给后面的命令,仅执行一次命令。相当于在输入command,回车后,从键盘上输入管道前命令运行的结果;
- 使用| xargs,将管道前的命令结果,以命令参数的形式,传递给xargs后面的命令,仅执行一次命令,同时输入所有命令参数。相当于在输入command + 所有命令参数(管道前命令运行的结果),回车运行;
- 使用exec,相当于将管道前命令运行的结果,以命令参数的形式,传递给exec后面的命令,执行多次命令,每次命令输入一个参数。相当于在输入command + 一个有命令参数(管道前命令运行的结果),回车运行;再继续同样的命令和下一个命令参数。