По какой-то причине это работает, если вы -print
направляете вывод наxkbcomp
:
setxkbmap \
-I ~/.config/xkb/ \
-rules evdev-local \
-layout "my-us(mdvp)" \
-print |
xkbcomp -I ~/.config/xkb/ - "$DISPLAY"
Я не думаю, что у вас что-то не так с макетом. Я попытался установить напрямую с setxkbmap
, но даже с опцией -verbose
вывод бесполезен:
Warning! Multiple definitions of rules file
Using command line, ignoring X server
Warning! Multiple definitions of keyboard layout
Using command line, ignoring X server
Trying to build keymap using the following components:
keycodes: evdev+aliases(qwerty)
types: complete
compat: complete
symbols: pc+my-us(mdvp)+inet(evdev)+terminate(ctrl_alt_bksp)
geometry: pc(pc104)
Error loading new keyboard description
Это уровень детализации по умолчанию. Но даже если я поставлю его на 10, что, по-видимому, является максимальным уровнем, он просто выводит «язык C» где он пытается искать файл правил, в дополнение к вышеперечисленному. Он больше ничего не выводит о том, почему он не загружает клавиатуру. описание.
Одна из причин, по которой я предпочитаю использовать канал xkbcomp
, а не просто использование setxkbmap
связано с тем, что первое, по-видимому, дает лучшую ошибку Сообщения.
Итак, позвольте мне сформулировать, как я понимаю задачу.
У нас есть текстовый файл "file.txt", содержащий строки с 3 столбцами:
directory = file
файлы с одинаковыми именами могут находиться в разных каталогах, и мы должны сгенерировать строки, чтобы оставить файл с таким же именем только один раз и удалить остальные. Верно?
Входной файл "file.txt":
dir_new_001 = rdt.txt
dir_new_002 = rdt.txt
dir_new_003 = rdt.txt
dir_new_001 = rdt2.txt
dir_new_002 = rdt2.txt
dir_new_001 = rdt3.txt
dir_new_003 = rdt3.txt
Однострочный код для выполнения (с использованием /bin/sh или /bin/bash):
for i in $(cat file.txt|awk '{print $3}'|sort|uniq); do F=$(grep " = $i$" file.txt|tail -n+2|awk '{print $1"/"$3}'|xargs); [ -n "${F}" ] && echo "rm -f ${F}"; done|sort
Результаты:
rm -f dir_new_002/rdt2.txt
rm -f dir_new_002/rdt.txt dir_new_003/rdt.txt
rm -f dir_new_003/rdt3.txt
Если вы хотите удалить файлы, вы всегда можете выполнить «rm» вместо того, чтобы печатать их с помощью «echo».
Если у вас есть доступ к утилите fdupes
, введите следующую команду:
$ fdupes -rdN dir/
r - recursive
d - preserver first file, delete other dupes
N - run silently (no prompt)
Дополнительные сведения см. в fdupes — инструмент командной строки для поиска и удаления дубликатов файлов в Linux .