我有几个目录:
├── 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