Следующий код:
find /mnt/test -name '*.dav' -exec sh -c 'for filename do
if [[ $(basename "$filename") != C*.dav ]];then
find "$filename" -type f -execdir ~/bin/rnm -y "$filename" -ns '/pd05/_/pd03/_/n/.dav' \;
fi
done' find-sh {} \;
Можно оптимизировать вот так (без find
или для цикла
):
rnm -y -ns '/pd5/_/pd3/_/n/.dav' -ss '^[^C].*\.dav$' -fo -dp -1 /mnt/test
-ss
: строка поиска (регулярное выражение). Используемое выше регулярное выражение ищет файлы, которые заканчиваются на .dav
и не начинаются на C
.
-fo
: Режим только файлов.
-dp
: Глубина. -1
означает неограниченную глубину, т.е. переход во все подкаталоги.
-ns
: строка имени (новое имя)
/ pd
: правило строки имени, которое подразумевает разные уровни имен родительских каталогов: 0 - непосредственный родитель, 1 - выше это и так далее.
/ n /
: Другое правило строки имени, которое подразумевает имя файла без расширения. /n/.dav
можно заменить на / fn /
(полное имя).
-y
: подтвердить ( - да
) для всех.
Правило udev применяется к действию add
по умолчанию. Правило udev действует на видеокарту, а не на монитор; поэтому оно запускается при добавлении видеокарты в систему, что на практике означает во время загрузки.
Подключение монитора приводит к действию change
, а не add
. Вы можете наблюдать это, выполнив udevadm monitor
и подключив монитор. Поэтому в правиле udev должно быть указано действие change
.
KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", \
ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/var/run/gdm/auth-for-vazquez-OlbTje/database", RUN+="/usr/bin/arandr"
Примеры, найденные в Интернете, подтверждают мое понимание, например, codingtony, чей monitor-hotplug.sh
скрипт может быть вам интересен.
Имя файла в /var/run
меняется при каждой перезагрузке, поэтому вы должны определить его автоматически внутри вашего скрипта. Этот ответ должен помочь.