移动除一个文件夹之外的所有文件夹

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)

Dav*_*vid 7

也许你正在寻找的东西像这样

我的问题的答案指出,您可以通过使用extglobbash shell 选项来实现您的目标。您可以通过执行shopt -s extglob或将该命令添加到您的~/.bashrc并重新登录来打开它。之后就可以使用该功能了。


要使用您的移动一切从例子dir1,除了dir1/srcdir2,这应该工作:

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 的更多信息。