Существует очевидно что-то нечетное продолжение вокруг нечувствительного к регистру подстановочного соответствия. Согласно ls
вывод, имена файлов содержат (AutoFlac)
, тогда как Ваш сценарий ищет (AutoFLAC)
. Инструменты Unix традиционно полагают, что два имен файлов то же, только если они - идентичный байт для байта; нет ничего встроенного для нечувствительного к регистру соответствия. Bash, кажется, ведет себя несовместимо в нечувствительной к регистру файловой системе, это может быть ошибкой.
Ваш сценарий был бы более устойчивым при использовании двойных кавычек вокруг подстановок переменных. Если Вы не делаете, удар (как другие оболочки) выполняет globbing на результате подстановки переменных. Это может быть источником Вашей проблемы. Всегда помещайте двойные кавычки вокруг подстановок переменных и управляйте заменами: "$foo"
, "$(foo)"
если Вы не знаете, что хотите выполнить разделение слова и globbing на результате. Также Ваш сценарий с недостающими двойными кавычками не работал бы над некоторыми именами файлов, например, с пробельными последовательностями, которые не являются одиночным пробелом.
Я также рекомендую делать текстовую замену в оболочке, существует меньше риска искажения имен файлов тот путь.
SUFFIX="(AutoFlac)"
for entry in *"$SUFFIX"*; do
target=${entry/ $SUFFIX/}
mv -- "$entry" "$target"
done
Нет никакого способа вызвать нечувствительное к регистру подстановочное соответствие, но можно заставить сценарий игнорировать регистр путем выполнения собственного соответствия.
SUFFIX="(autoflac)"
for entry in *; do
if [[ ${entry,,} = *$SUFFIX* ]]; then
# Remove everything from the last space to the last .
mv -- "$entry" "${entry% *}.${entry##*.}"
fi
done
sudo -u [username] mkdir /home/[username]/public_html/[folder_name]
хорошо работает.
Из того, что я вижу полномочия, и владение является тем же, если я должен был войти в систему как тот же пользователь и создать папку под public_html
.
Можно также звонить su -c "mkdir /home/[username]/public_html/[folder_name]" [username]
Учитывая те полномочия, только владелец каталога или суперпользователь могут создать подкаталоги.
Единственным способом, которым Вы могли избежать использования дополнительные полномочия создать папку, является изменение владение себе (с sudo
), создайте подкаталог и наконец возвратите владение владельцу, но не будьте похожи на хорошее решение меня.
sudo -u devuser1 mkdir /home/devuser1/public_html/test
. Это не то же как создание папки с sudo
это? ls -al
показывает: drwxr-sr-x 2 devuser1 www-data 4096 Apr 28 23:49 test
– maGz
29.04.2013, 01:02
sudo
пока Вы изменяете владение после этого.
– RSFalcon7
29.04.2013, 01:14
ls
показывает на содержании пользователя public_html
, появляется, как будто изменение владения не требуется, возможно, полномочия все же.
– maGz
29.04.2013, 09:31
su
, вместо этого я использую его для аутентификации меня как пользователь, который собирается создать папку..., которая имеет смысл?
– maGz
29.04.2013, 09:34
с Установить
, вы можете создать каталог с определенным владельцем, группой и режимом:
install -d -o <user> -g <group> -m <mode> <path>
sudo -u USERNAME mkdir DIRNAME
, Вы выполняетесьmkdir
управляйте как пользовательUSERNAME
. Это не точно эквивалентно входу в систему какUSERNAME
, потому что вход в систему также подразумевает переменные среды установки и так далее, но это - часть, которая имеет значение, а именно, выполняя процесс как конкретного пользователя. – Gilles 'SO- stop being evil' 30.04.2013, 03:49