Я хотел добавить корректировку в скрипт Маттео . Для проверки существования файлов перед запуском на них команды chmod следует использовать цикл for. Это позволит более изящно устранить ошибку сценария.
Я думаю, что это лучший вариант, потому что его можно использовать для всех * nix операционных систем, таких как Solaris, Linux и т. Д.
#!/bin/sh
reference=$1
shift
files=$*
for file in $reference $files; do
[ -f $file ] || { echo "$file does not exist"; exit 1; }
done
# strip the permissions (whith extended regexes could be more readable)
OWNER=$(ls -l ${reference} | sed -e "s/.\(...\).*/\1/" | sed -e "s/[-]//g" )
GROUP=$(ls -l ${reference} | sed -e "s/....\(...\).*/\1/" | sed -e "s/[-]//g" )
OTHER=$(ls -l ${reference} | sed -e "s/.......\(...\).*/\1/" | sed -e "s/[-]//g" )
chmod u=${OWNER},g=${GROUP},o=${OTHER} ${files}
Я обнаружил, что на одной из моих машин Solaris 10 stat
был не найден. Однако это может быть проблемой с моей конфигурацией.