仅复制具有特定扩展名的文件,同时根据父文件夹重命名每个文件

仅复制具有特定扩展名的文件,同时根据父文件夹重命名每个文件

我有几个目录:

├── folder1.x
│   ├── dsferwe
│   ├── ewrwr342
│   ├── analysis
│   ├── fdsds
│   ├── vcxvcxz
│   ├── 324322
│   ├── export.asc
│   ├── f_random_subfolder.xf
│   │   ├── -.method
│   │   ├── desktop.ini
│   │   ├── lock.file
│   │   └── submethods.xml
│   └── Sync
├── random_folder4.x
│   ├── dsferwe
│   ├── ewrwr342
│   ├── analysis
│   ├── fdsds
│   ├── vcxvcxz
│   ├── 324322
│   ├── export.asc
│   ├── 22random_subfolder.xf
│   │   ├── -.method
│   │   ├── desktop.ini
│   │   ├── lock.file
│   │   └── submethods.xml
│   └── Sync
├── X93430.x
│   ├── dsferwe
│   ├── ewrwr342
│   ├── analysis
│   ├── fdsds
│   ├── vcxvcxz
│   ├── 324322
│   ├── export.asc
│   ├── random_subfolder222.xf
│   │   ├── -.method
│   │   ├── desktop.ini
│   │   ├── lock.file
│   │   └── submethods.xml
│   └── Sync

每个目录包含一个export.asc文件。

我希望将copy所有export.asc文件移动到一个新目录,同时重命名为与其父目录同名。因此,最后根据上面的示例,我会将这些文件放在一个新文件夹中:

folder1.x.asc
random_folder4.x.asc
X93430.x.asc

我怎样才能实现这个目标?

有关的我已经关注过但尚未取得任何成功的主题

答案1

你可以这样做find -exec sh -c ...

find . -name export.asc \
-exec sh -c 'cp "$1" /path/to/new/folder/"$(basename "$(dirname "$1")")".asc' sh {} \;
  • "$(basename "$(dirname "$1")")"将是文件所在文件夹的名称。

如果您想确保在没有事先交互的情况下不会覆盖任何文件,请添加-i到。cp

相关内容