Как я могу скопировать все файлы и папки из одного каталога в другой с похожей структурой с помощью `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
задан 28 April 2016 в 11:40

1 ответ

Можно сделать, это в ударе путем включения расширилось globbing.

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
1
ответ дан 28 April 2016 в 21:40
  • 1
    Проверьте кабель и т.д. Это должна быть аппаратная проблема. – Pilot6 20 September 2017 в 23:31

Другие вопросы по тегам:

Похожие вопросы: