【发布时间】:2015-02-23 17:43:33
【问题描述】:
假设我要将dir内的所有文件复制到dest:
$ tree .
.
├── dest
└── dir
├── dir
│ ├── file1
│ └── file2
└── file3
如果我知道文件名和目录深度,这很容易:
$ echo dir/f* dir/*/*
dir/file3 dir/dir/file1 dir/dir/file2
$ cp dir/f* dir/*/* dest/
$ tree dest/
dest/
├── file1
├── file2
└── file3
只获取目录也很容易(使用 globstar):
$ echo dir/**/*/
dir/dir/
但我不知道如何glob 仅文件,例如以下不起作用:
$ echo dir/**/*!(/)
dir/**/*!(/)
【问题讨论】:
-
“仅文件”是什么意思?您要排除空目录吗?
-
(AFAIK)您不能排除所有具有扩展 glob 的目录。像
*!(/)这样的模式不起作用,!(*/)挂起 shell。 -
@CommuSoft:我想排除所有目录,就像
dir/f* dir/*/*一样。
标签: bash shell pattern-matching glob shopt