Переименовать все скрытые каталоги, созданные параллельным GNU

Я надеялся, что есть какая-нибудь интерактивная программа для настройки xrandrпараметров (гаммы/яркости в частности ), но ничего не нашел.

Итак, я написал этот сценарий оболочки, который позволяет интерактивную настройку яркости/гаммы, а также сохранение/восстановление настроек.

Сохраните файл в irandr.sh, выполните chmod u+x irandr.sh, чтобы сделать его исполняемым, и запустите как ./irandr.sh <outputname>.

d / f / D / F / j / k / J / K Клавиши регулируют яркость(d / f / D / F)или гамма(j / k / J / K)настройки с шагом 5 (нижний регистр )или 1 (верхний регистр.)

  • sсохраняет настройки в точечный файл
  • lзагружает настройки из файла точек
  • rсбрасывает яркость/гамму на значения по умолчанию (1,0)
  • qуходит.

Точечный файл для данного вывода: ~/irandr-<outputname>.dat. Если вы запустите без аргумента, он отобразит действительные выходные данные xrandr.

Вы можете добавить аргумент -setonlyв командную строку, которая будет считывать настройки для файла точек данного дисплея, обновлять дисплей и выходить. (Полезно, наверное, в файле ~/.bashrcдля автоматической установки гаммы/яркости.)

#!/bin/bash
# irandr.sh, by Dale Gass (dale@gass.ca)
# Wed Apr 10 16:43:22 EDT 2019

# Process arguments
if [ "$1" != "" ]
then
    output="$1"
else
    echo "Usage: irandr.sh <outputname> [-setonly]"
    echo "(Settings saved to ~/.xrandr-<outputname>.dat)"
    echo
    echo "Valid outputs:"
    xrandr | egrep -v '^( |Screen)'
    exit 1
fi
setonly=0
if [ "$2" = "-setonly" ]; then setonly=1; fi

# Initialize variables, read for dotfile if exists
cmdhelp="d/f/D/F=brightness j/k/J/K=gamma r=reset s=save l=load q=quit"
brightness=100
gamma=100
dotfile=~/.irandr-"$output".dat
if [ -s "$dotfile"  ]; then read brightness gamma <"$dotfile"; fi
if [ $setonly -eq 0 ]; then 
    echo $cmdhelp
    stty -echo raw intr $'\000' # Allow single character input
fi

# Main loop for setting adjustment
echo 'Bright Gamma'
while :
do
    b=$(bc <<< "scale=2; $brightness/100")  # Make 0.0-1.0
    g=$(bc <<< "scale=2; $gamma/100")
    xrandr --output "$output" --brightness "$b" --gamma "$g:$g:$g"
    printf "\r%4d %4d " $brightness $gamma
    if [ $setonly -eq 1 ]; then echo; exit 0; fi

    read -n1 ch     # Get input character from user
    case $ch in
    d) let brightness=brightness-5;; D) let brightness=brightness-1;;
    f) let brightness=brightness+5;; F) let brightness=brightness+1;;
    j) let gamma=gamma-5;;           J) let gamma=gamma-1;;
    k) let gamma=gamma+5;;           K) let gamma=gamma+1;;
    r) brightness=100; gamma=100;;
    s) echo "$brightness    $gamma" >"$dotfile" && echo -e "Saved\r";;
    l) read brightness gamma <"$dotfile"     && echo -e "Loaded\r";;
    q|$'\003') break;;
    *) echo -e "$cmdhelp\r";;
    esac
done

stty echo -raw intr $'\003' # Undo single character input
4
11.03.2020, 16:08
3 ответа

Если единственной проблемой является то, что каталоги скрыты, вы можете просто удалить .в начале их имени, чтобы сделать их видимыми. Например, используя perl -переименовать (с именем renameв Ubuntu):

rename 's/^\.//' '.\_Validate'*

Или только с инструментами-оболочками:

for dir in '.\_Validate'*; do echo mv "$dir" "${dir//.}"; done

Боты из них оставляют вас с ужасными именами каталогов, с пробелами, косыми чертами и другими неприятными вещами. Поскольку вы переименовываете, вы можете также переименовать во что-то вменяемое:

rename 's/^\.\\//; s/\s+/_/g' '.\_Validate'*

Это приведет к:

$ ls -d _*
_ValidateAll.sh_GL_100  _ValidateAll.sh_GL_107  _ValidateAll.sh_GL_114
_ValidateAll.sh_GL_101  _ValidateAll.sh_GL_108  _ValidateAll.sh_GL_115
_ValidateAll.sh_GL_102  _ValidateAll.sh_GL_109  _ValidateAll.sh_GL_116
_ValidateAll.sh_GL_103  _ValidateAll.sh_GL_110  _ValidateAll.sh_GL_117
_ValidateAll.sh_GL_104  _ValidateAll.sh_GL_111  _ValidateAll.sh_GL_118
_ValidateAll.sh_GL_105  _ValidateAll.sh_GL_112  _ValidateAll.sh_GL_119
_ValidateAll.sh_GL_106  _ValidateAll.sh_GL_113  _ValidateAll.sh_GL_120

ВАЖНО :обратите внимание, что я не проверяю конфликт имен файлов. Если вы переименуете один из них во что-то, что уже существует,то вы перезапишете существующий файл.

4
28.04.2021, 23:20

Вы можете использовать GNU Parallel:

parallel mv {} '{=s/^\.\\_//=}' ::: '.\_ValidateAll'*

Это удалит .\_из имен.

Чтобы также заменить пробелы на _, выполните:

parallel mv {} '{=s/^\.\\_//; s/\s/_/g=}' ::: '.\_ValidateAll'*
4
28.04.2021, 23:20

В принципе (и, как вы, вероятно, знаете ), файлы и каталоги скрыты, если их имя начинается с .. Таким образом, вы можете снова сделать их «видимыми», удалив .. Это можно сделать в bash, используя встроенные функции работы со строками :

.
user@host$ for dir in '.\_ValidateAll'*; do newname="${dir#.}"; mv "$dir" "$newname"; done

Тем не менее, вам -рекомендуется проверить правильность работы, предварительно попробовав

user@host$ for dir in '.\_ValidateAll'*; do newname="${dir#.}"; echo "rename $dir to $newname"; done

Обновление:вам обязательно следует последовать совету в ответе @terdon, чтобы воспользоваться возможностью и избавиться от всех специальных символов в этом процессе.

3
28.04.2021, 23:20

Теги

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