我有两个目录dir1和dir2。我需要将文件夹dir1的内容移动到dir2,除了一个文件夹dir1 / src。
我试过这个
mv !(src) dir1/* dir2/
但它不起作用,它仍然显示此错误
bash: !: event not found
答案 0 :(得分:3)
也许您正在寻找类似this的内容?
我的问题的答案指出,您尝试使用extglob
bash shell选项可以实现的目标。您可以通过执行shopt -s extglob
或将该命令添加到~/.bashrc
并重新登录来启用它。之后你可以使用这个功能。
要使用将dir1
除dir1/src
之外的所有内容移至dir2
的示例,这应该有效:
mv -vt dir2/ dir1/!(src)
示例输出:
$ 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
有关extglob的更多信息,请访问here。