子目录中有类似模式的文件name/name.ext
。子目录中有许多具有相同扩展名的文件,但我只想复制具有上述模式的文件。实现此目的的命令是什么?
答案1
可能有一个巧妙的方法可以使用具有更广泛的文件名生成(通配符)功能的 shell(如 zsh),但如果你不能这样做,那么 GNUfind
命令支持正则表达式匹配,至少对某些正则表达式类型使用反向引用。例如给定
$ tree .
.
├── bar
│ ├── 1.xyz
│ ├── 2.xyz
│ └── 3.xyz
├── baz
│ ├── 1.xyz
│ ├── 2.xyz
│ ├── 3.xyz
│ └── baz.xyz
└── foo
├── 1.xyz
├── 2.xyz
├── 3.xyz
└── foo.xyz
3 directories, 11 files
然后
$ find . -regextype posix-extended -regex '.*/([^/]+)/\1\.xyz$'
./baz/baz.xyz
./foo/foo.xyz
您可以修改它以复制
find . -regextype posix-extended -regex '.*/([^/]+)/\1\.xyz$' -exec cp -n -t path/to/newdir/ {} +
答案2
以下将把 ./name/name.txt 复制到 . (您的当前目录)
cp name/name.txt .