如何使用“find”和“xargs”将所有文件和文件夹从一个目录复制到具有类似结构的另一个目录?

如何使用“find”和“xargs”将所有文件和文件夹从一个目录复制到具有类似结构的另一个目录?

例如,我使用find命令find /usr/share/icons -iname 'foxitreader*'查找文件:

/usr/share/icons/hicolor/32x32/apps/FoxitReader.png
/usr/share/icons/hicolor/48x48/apps/FoxitReader.png
/usr/share/icons/hicolor/64x64/apps/FoxitReader.png
/usr/share/icons/hicolor/128x128/apps/FoxitReader.png
/usr/share/icons/hicolor/16x16/apps/FoxitReader.png

并且我想将xargs它们复制到.local/share/icons/,并且目录中icons具有相同的子目录结构,即:

 └── hicolor
    ├── 16x16
    │   └── apps
    │       ├── 1B94_WScript.0.png
    │       ├── 1CD8_rundll32.0.png
    │       ├── 1E64_notepad.0.png
    │       ├── 2402_msiexec.0.png
    │       
    ├── 24x24
    │   └── apps
    │       ├── 6C56_Timwp.0.png
    │       └── FoxitReader.png
    ├── 256x256
    │   └── apps
    │       ├── 1E64_notepad.0.png
    │       ├── 2402_msiexec.0.png
    │       ├── 2EF4_wordpad.0.png
    ├── 32x32
    │   └── apps
    │       ├── 1B94_WScript.0.png
    │       ├── 1CD8_rundll32.0.png
    │       ├── 1E64_notepad.0.png
    └── 48x48
        └── apps
            ├── 1CD8_rundll32.0.png
            ├── 1E64_notepad.0.png
            ├── 2402_msiexec.0.png

我只想复制我找到的文件,而不是整个目录结构,所以我该如何将这些文件复制到相应的目录中,就像这样:
/usr/share/icons/hicolor/32x32/apps/FoxitReader.png.local/share/icons/32x32/apps/FoxitReader.png,等等。
并且该icons目录已经有这些子目录,并且它不是空的,所以你不能只用cp合并它们,我用它find来找到文件,并想用它xargs一次复制它们,而不是手动复制多次。

答案1

您可以通过启用扩展在 bash 中执行此操作通配符

shopt -s extglob

然后使用--parents的选项cp

因此,请前往/usr/share/icons/hicolor/并执行以下操作:

cp -R --parent {128x128,32x32}/apps ~/.local/share/icons/

修改其中的目录名称{}以满足您的需要。

例如:

ron@ron:~$ tree dir1/          # Destination before copying
dir1/
├── 128x128
│   └── apps
├── 16x16
│   └── apps
├── 32x32
│   └── apps
└── 48x48
    └── apps
karthik@4736Z:~/dir2$ ls hicolor/            # Source structure
128x128  22x22    32     42x42  512x512  72x72  icons             scalable
16x16    24x24    32x32  48     64       8x8    icon-theme.cache  symbolic
192x192  256x256  36x36  48x48  64x64    96x96  index.theme
ron@ron:~/dir2$ tree hicolor/ | head -n 6
hicolor/
├── 128x128
│   ├── actions
│   ├── animations
│   ├── apps
│   │   ├── amazon-store.png
ron@ron:~/dir2/hicolor$ cd hicolor/    
ron@ron:~/dir2/hicolor$ cp -R --parent {128x128,32x32}/apps ../../dir1/
ron@ron:~/dir2/hicolor$ tree ../../dir1/          # Destination after copying
../../dir1/
├── 128x128
│   └── apps
│       ├── amazon-store.png
│       ├── chromium-browser.png
│       ├── credentials-preferences.png
│       ├── deluge.png
│       ├── display-im6.q16.png
│       ├── libreoffice-base.png
│       ├── libreoffice-calc.png
│       ├── libreoffice-draw.png
│       ├── libreoffice-impress.png
│       ├── libreoffice-main.png
│       ├── libreoffice-math.png
│       ├── libreoffice-startcenter.png
│       ├── libreoffice-writer.png
│       ├── ubuntuone-music.png
│       ├── ubuntusoftware.svg
│       ├── vivaldi.png
│       ├── vlc.png
│       └── vlc-xmas.png
├── 16x16
│   └── apps
├── 32x32
│   └── apps
│       ├── aim.png
│       ├── baobab.png
│       ├── bluetooth.png

相关内容