Помогите подправить скриптик

Автор tierbbr, 23 ноября 2011, 23:48:30

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

tierbbr

#!/bin/bash
ROOT_DIR=$1
DIR_PERM=$2
FILE_PERM=$3

IFS=$'\n'
for name in $(find ${ROOT_DIR})
do
if [ -d "$name" ]
then
chmod ${DIR_PERM} "$name"
echo "DIRECTORY: '${name}' PERMS CHANGED TO 0x${DIR_PERM}"
else
chmod ${FILE_PERM} "$name"
echo "FILE: '${name}' PERMS CHANGED TO 0x${FILE_PERM}"
fi
done


Не пашет, как быть?
Предыдущий вариант http://www.mczone.ru/relations/num/247/1 спотыкался о пробел и завершал работу, а этот просто пропускает файл\папку с пробелом, выдавая ошибку, вдобавок обрабатывает не все объекты

orlyanuch

#1
У меня всё работает. И файлы, и папки, в именах которых есть пробелы обрабатываются.

Сообщение объединено: 24 ноября 2011, 17:39:28

А запускаешь как суперпользователь?
И выведи ls -lR где не всё обрабатывает.
Открыть содержимое (спойлер)
можно ещё вот этот скриптик попробовать, он тоже работает

#!/bin/bash
ROOT_DIR=$1
DIR_PERM=$2
FILE_PERM=$3
TEMP_FILE=/tmp/file$$

find "$ROOT_DIR" > $TEMP_FILE

while read LINE
do
   if [ -d "$LINE" ]
   then
      chmod $DIR_PERM "$LINE"
      echo "DIRECTORY: '$LINE' PERMS CHANGED TO 0x${DIR_PERM}"
   elif [ -f "$LINE" ]
   then
      chmod $FILE_PERM "$LINE"
      echo "FILE: '$LINE' PERMS CHANGED TO 0x${FILE_PERM}"
   fi
done <$TEMP_FILE
rm $TEMP_FILE
[свернуть]
Edimus, ut vivamus; nоn vivimus, ut edamus.

tierbbr

Решение найдено!


#!/bin/bash
ROOT_DIR=$1
DIR_PERM=$2
FILE_PERM=$3

IFS=$'\n'
for name in $(find ${ROOT_DIR} | sed 's/ /©/g' )
do
name="$(echo $name | sed 's/©/ /g')"
if [ -d "$name" ]
then
chmod ${DIR_PERM} "$name"
echo "DIRECTORY: '${name}' PERMS CHANGED TO 0x${DIR_PERM}"
else
chmod ${FILE_PERM} "$name"
echo "FILE: '${name}' PERMS CHANGED TO 0x${FILE_PERM}"
fi
done

orlyanuch

Странно, почему такие проблемы с пробелами в первых двух скриптах? Вроде всё работает...
Edimus, ut vivamus; nоn vivimus, ut edamus.

keekdown

А двойные кавычки и одинарные это же разница?Или я не про то говорю?

orlyanuch

Есть при обращении к переменным, подробнее тут.
Но внутри двойных кавычек одинарные уже не экранируют переменные.
Edimus, ut vivamus; nоn vivimus, ut edamus.