Как изменить разрешение и группу-владельца файла одновременно

«псевдонимы» обычно относятся к псевдонимам командной строки в оболочках, что может быть не тем, что вам нужно, если вы используете графический интерфейс . Наиболее близким к «ярлыкам» для файлов являются символические ссылки, но они всего лишь способ ссылки на файл по другому имени, а не то, что можно использовать для передачи аргументов командной строки программе.

Лучше всего подходит простой сценарий оболочки. Например. создайте файл со следующим содержимым и сделайте его исполняемым ( chmod + x / path / to / the / script ):

#!/bin/sh
evince --page-label=36 /path/to/the/file.pdf

Запуск сценария должен запустить evince и запросить его открыть данный файл на данной странице.

Как упоминалось в комментариях, параметры, необходимые для открытия документа в данной позиции, полностью зависят от программы. Например, параметр - page-label упоминается в справке командной строки . Многие текстовые редакторы (текстовый режим) и меньше поддерживают опцию + NNN для перехода к строке NNN при открытии файла. С другой стороны, LibreOffice в некоторых случаях сохраняет последнюю просмотренную позицию для каждого пользователя . Проверьте руководства к своим программам.

9
09.05.2015, 01:16
2 ответа
#!/bin/bash

# Setting the Variables for execution
LOGDIR=$HOME
CURRENTTIME=$(date +"%Y%m%d%s%H%M%S")
LOGFILE=${LOGDIR}/chgpermission_${CURRENTTIME}.log
MASTERFILE=$1
INDEX=0

# Checking the number of Parameters passed
if [ "$#" -ne 1 ]; then
    echo "Master file name is mandatory parameter" > ${LOGFILE}
    exit 1
fi

# Loading the Master file into an Array 
echo "Loading the Master file ${MASTERFILE} into an array" >> ${LOGFILE}
while read line
do
#echo $line  
MASTERARRAY[$INDEX]=$HOME/$line 
INDEX=$(expr $INDEX + 1) 
done < ${MASTERFILE}

echo "Number of parameters in an master array ${MASTERARRAY[@]}" >> ${LOGFILE}

# Changing the permission of the file 
echo "Changing the permission of the file in master file ${MASTERFILE}" >> ${LOGFILE} 
index=0
for index in "${MASTERARRAY[@]}"
do
    if [ -f "$index" ] 
    then
       echo "$index file exist"
       echo  "$index file exist" >> ${LOGFILE}
       chmod 755 "$index" 
       chown workstation "$index"
       chgrp workstation "$index" 
    else
      echo "$index file does not extst"
      echo "$index file does not exist" >> ${LOGFILE}  
    fi 
done 
-3
27.01.2020, 20:06

Использование правильного инструмента для работы в *nix важно, но на самом деле повторение одного и того же пути в каждой цепочке команд выглядит глупо. Вместо этого вам действительно следует использовать переменные Bash, а в небольших сценариях особенно использовать $_.

Ваша команда станет:

chmod 123 WantToChangeThisFile && chgrp admin $_

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

1
27.01.2020, 20:06

Теги

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