Vic*_*tor 1 unix linux bash shell
我有两个目录 dir1 和 dir2。我需要将文件夹 dir1 的内容移动到 dir2,除了一个文件夹 dir1/src。
我试过这个
mv !(src) dir1/* dir2/
Run Code Online (Sandbox Code Playgroud)
但它不起作用,它仍然显示此错误
bash: !: event not found
Run Code Online (Sandbox Code Playgroud)
也许你正在寻找的东西像这样?
我的问题的答案指出,您可以通过使用extglobbash shell 选项来实现您的目标。您可以通过执行shopt -s extglob或将该命令添加到您的~/.bashrc并重新登录来打开它。之后就可以使用该功能了。
要使用您的移动一切从例子dir1,除了dir1/src到dir2,这应该工作:
mv -vt dir2/ dir1/!(src)
Run Code Online (Sandbox Code Playgroud)
示例输出:
$ mkdir -pv dir1/{a,b,c,src} dir2
mkdir: created directory 'dir1'
mkdir: created directory 'dir1/a'
mkdir: created directory 'dir1/b'
mkdir: created directory 'dir1/c'
mkdir: created directory 'dir1/src'
mkdir: created directory 'dir2'
$ ls -l dir1/
total 16
drwxrwxr-x 2 dw dw 4096 Apr 7 13:30 a
drwxrwxr-x 2 dw dw 4096 Apr 7 13:30 b
drwxrwxr-x 2 dw dw 4096 Apr 7 13:30 c
drwxrwxr-x 2 dw dw 4096 Apr 7 13:30 src
$ ls -l dir2/
total 0
$ shopt -s extglob
$ mv -vt dir2/ dir1/!(src)
'dir1/a' -> 'dir2/a'
'dir1/b' -> 'dir2/b'
'dir1/c' -> 'dir2/c'
$ ls -l dir1/
total 4
drwxrwxr-x 2 dw dw 4096 Apr 7 13:30 src
$ ls -l dir2/
total 12
drwxrwxr-x 2 dw dw 4096 Apr 7 13:30 a
drwxrwxr-x 2 dw dw 4096 Apr 7 13:30 b
drwxrwxr-x 2 dw dw 4096 Apr 7 13:30 c
Run Code Online (Sandbox Code Playgroud)
可以在此处找到有关 extglob 的更多信息。