как сделать символьные ссылки файлов от папки до папки

Я использую Ubuntu 18.04, 19.04 и 19.10

для gnome-shell цель theming, я сталкиваюсь ниже ситуации.

admin@i7-4770:~$ ls /usr/share/themes/Yaru/gnome-shell/
calendar-today.svg               noise-texture.png
checkbox-dark.svg                no-notifications.svg
checkbox-focused-dark.svg        pad-osd.css
checkbox-focused.svg             pointer-double-click-symbolic.svg
checkbox-off-dark.svg            pointer-drag-symbolic.svg
checkbox-off-focused-dark.svg    pointer-primary-click-symbolic.svg
checkbox-off-focused.svg         pointer-secondary-click-symbolic.svg
checkbox-off.svg                 process-working.svg
checkbox.svg                     running-indicator.svg
dash-placeholder.svg             source-button-border.svg
gnome-shell.css                  summary-counter.svg
gnome-shell-high-contrast.css    toggle-off-dark.svg
key-enter.svg                    toggle-off-hc.svg
key-hide.svg                     toggle-off-intl.svg
key-layout.svg                   toggle-off.svg
key-shift-latched-uppercase.svg  toggle-on-dark.svg
key-shift.svg                    toggle-on-hc.svg
key-shift-uppercase.svg          toggle-on-intl.svg
lockscreen-gradient.svg          toggle-on.svg
logged-in-indicator.svg          ws-switch-arrow-down.svg
message-indicator-symbolic.svg   ws-switch-arrow-up.svg
no-events.svg
admin@i7-4770:~$ 

Я должен создать символьную ссылку каждого .svg и .png файлы от вышеупомянутого вывода до /usr/share/gnome-shell/theme/ каталог.

обряд теперь, мой единственный путь состоит в том, чтобы работать за каждым файлом.

sudo ln -s /usr/share/themes/Yaru/gnome-shell/calendar-today.svg /usr/share/gnome-shell/theme/

Я уверен, эксперты могут сделать это очень быстрым.

Как я могу достигнуть этого?

0
задан 20 December 2019 в 21:01

2 ответа

Вам вообще не нужна петля. Просто запустите эту команду ln :

sudo ln -s /usr/share/themes/Yaru/gnome-shell/*{png,svg} /usr/share/gnome-shell/theme/

Раскрытие скобок обрабатывается оболочкой перед запуском любой команды. Таким образом, приведенная выше команда выглядит так:

sudo ln -s /usr/share/themes/Yaru/gnome-shell/noise-texture.png  /usr/share/themes/Yaru/gnome-shell/checkbox-dark.svg [...] /usr/share/themes/Yaru/gnome-shell/ws-switch-arrow-up.svg /usr/share/gnome-shell/theme/

Другими словами, она становится ln -s f1 f2 ... fN / path / to / target / dir , и это все, что вам нужно для связывания всех ваших файлов. Например:

$ ls foo/
file1.svg  file2.svg  file3.svg  file4.png  file5.png  file6.png
$ ln -s $HOME/foo/*{svg,png} bar/
$ ls -l bar/
total 0
lrwxrwxrwx 1 terdon terdon 26 Dec 26 12:16 file1.svg -> /home/terdon/foo/file1.svg
lrwxrwxrwx 1 terdon terdon 26 Dec 26 12:16 file2.svg -> /home/terdon/foo/file2.svg
lrwxrwxrwx 1 terdon terdon 26 Dec 26 12:16 file3.svg -> /home/terdon/foo/file3.svg
lrwxrwxrwx 1 terdon terdon 26 Dec 26 12:16 file4.png -> /home/terdon/foo/file4.png
lrwxrwxrwx 1 terdon terdon 26 Dec 26 12:16 file5.png -> /home/terdon/foo/file5.png
lrwxrwxrwx 1 terdon terdon 26 Dec 26 12:16 file6.png -> /home/terdon/foo/file6.png

Если вам просто нужен цикл по какой-то причине, используйте вместо него globs:

for file in /usr/share/themes/Yaru/gnome-shell/*{png,svg}; do
    sudo ln -s "$file" /usr/share/gnome-shell/theme/
done

Таким образом, вам не нужно беспокоиться о каких-либо странных именах файлов, как если бы вы использовали LS . Также обратите внимание, как я цитирую "$ file" , что также необходимо для странных имен файлов.

4
ответ дан 26 December 2019 в 12:02

после нескольких поисков с помощью Google..

закончился с ниже сценария

#!/bin/bash

for p in $(ls /usr/share/themes/Yaru/gnome-shell | grep '.svg\|.png'); do
    sudo ln -s /usr/share/themes/Yaru/gnome-shell/$p /usr/share/gnome-shell/theme/
done

, Он работал. Но я все еще думаю, что эксперты могут сделать его с единственной командой, которая может быть введена в терминал.

1
ответ дан 21 December 2019 в 23:23

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

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