移动除一个以外的所有文件

时间:2017-04-07 09:54:05

标签: linux bash shell unix

我有两个目录dir1和dir2。我需要将文件夹dir1的内容移动到dir2,除了一个文件夹dir1 / src。

我试过这个

mv !(src) dir1/* dir2/

但它不起作用,它仍然显示此错误

bash: !: event not found

1 个答案:

答案 0 :(得分:3)

也许您正在寻找类似this的内容?

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

要使用将dir1dir1/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