Если вашей целью является удаление всех файлов в массиве папок, другой альтернативой может быть передача массива в rm
вот так:
#!/bin/bash
$IMAGES_DIR="/Users/michael/scripts/imagefiles"
$BACKUP_DIR="/Users/michael/scripts/imagebackups"
#...
# to preserve whitespaces in path strings, add double quotes around each variable
array=( "$IMAGES_DIR" "$BACKUP_DIR" )
# this appends "/*" to the end of each dirname if you want to delete the contents of the directories
# without deleting the directories themselves
array=( "${array[@]/%//*}" )
# this will spread the array into multiple calls to rm
rm -rf ${array[@]}
Один пример вкладыша -:
rm -rf ${array[@]/%//*}
Но если вы хотите удалить папки, вы можете просто использовать
rm -rf ${array[@]}
Следует отметить одно различие с решением B-слоя , которое заключается в том, что хотя find
выводит любые ошибки при нахождении предоставленных путей, rm
в этом примере этого не делает.
РЕДАКТИРОВАТЬ:
Как указал kusalananda , важно отметить, что такое распространение массива может быть опасным, если в ваших путях есть пробелы или символы оболочки -. Чтобы избежать разбиения массива на эти символы, не забудьте добавить двойные кавычки вокруг переменных, добавленных в массив.
/etc/systemd/system/default.target
, указывающее на /usr/lib/systemd/system/graphical.target
, должно содержать:Wants=display-manager.service
Чтобы проверить цель systemd по умолчанию:
systemctl get-default
graphical.target
# ls -l /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 40 Jan 1 2020 /etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target
/etc/systemd/system/display-manager.service
, указывающая на фактическую единицу Display Manager, в моем случае это /usr/lib/systemd/system/lxdm.service
. Чтобы проверить:
ls -l /etc/systemd/system/display-manager.service
lrwxrwxrwx. 1 root root 36 Jan 1 2020 /etc/systemd/system/display-manager.service -> /usr/lib/systemd/system/lxdm.service
# cat /usr/lib/systemd/system/lxdm.service
[Unit]
Description=LXDM (Lightweight X11 Display Manager)
#Documentation=man:lxdm(8)
Conflicts=getty@tty1.service
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service livesys-late.service
#Conflicts=plymouth-quit.service
[Service]
ExecStart=/usr/sbin/lxdm
Restart=always
IgnoreSIGPIPE=no
#BusName=org.freedesktop.lxdm
[Install]
Alias=display-manager.service
Если эти два требования соблюдены, у вас должен быть диспетчер графического дисплея при загрузке.
Скорее всего, вы захотите установить SDDM, так как это предпочтительный DM для KDE. Вот как вы можете установить/повторно включить его .
Параметр graphical.target
не переводит вас автоматически в графический сеанс. Что он делает, так это гарантирует, что при загрузке вашей системы все программы/службы, которые, как ожидается, будут запущены в цели graphical.target
, будут запущены.
Когда вы включаете службу, вы добавляете эту службу к некоторой цели (multi-user
, graphical
и т. д. ). В какой конкретной цели зависит от конфигурации этого блока.
Вам нужно включить какую-то программу, чтобы при входе системы в цель graphical
она позаботилась о запуске графического сеанса.
Обычно эта программа представляет собой Диспетчер отображения. Убедитесь, что в вашей системе установлены некоторые из них. Если вы используете KDE, вы можете предпочесть использовать sddm
. В моей системе Arch я бы установил его, запустив:
sudo pacman -S sddm
Затем вам нужно включить этот юнит. Для этого запустите
systemctl enable sddm.service