LINUX.ORG.RU

Операции над файлами с точкой в начале


0

0

Доброго времени суток. Объясните пожалуйста, что будет, если я попытаюсь, например, сменить владельца файлов, начинающихся с точки в текущей директории командой chown -R user .* Изменит ли эта команда файлы в директории ".."? Если да, то как этого избежать?

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

lester ★★★★
()

>Изменит ли эта команда файлы в директории ".."?

Нет, gnu-утилиты достаточно умны, чтобы избегать подобные ситуации.

AX ★★★★★
()
Ответ на: комментарий от AX

А если случится ошибка и она обработает точку?

wfrr ★★☆
()

> Изменит ли эта команда файлы в директории ".."?

Изменит. Точнее, попытается (если у запускающего соответствующих прав нет, то выругается на "access denied")

> Если да, то как этого избежать?


chown -R .??*

.??* — маска специально для dot-файлов как раз на случай '..' и '.' (текущий каталог)

dexpl ★★★★★
()
Ответ на: комментарий от AX

>>Изменит ли эта команда файлы в директории ".."?

>Нет, gnu-утилиты достаточно умны, чтобы избегать подобные ситуации.

.* возвращает в том числе и ".", и ".."

И gnu-утилиты тут не при чём. В отличии от винды, уайлдкарды обрабатывает не утилита, а шелл.

Т.е. не chmod раскрывает звёздочки, а получает сразу готовый список файлов от bash.

KRoN73 ★★★★★
()

> Если да, то как этого избежать?

Заведи хорошую привычку chown'ить и chmod'ить из директории уровнем выше. Или пользуйся гуи.

LamerOk ★★★★★
()
Ответ на: комментарий от Cigarettesmoker

Да, на все. Ибо для всех этих программ получается список от bash. А bash как раз прекрасно и наплевательски подставляет ".." под ".*"

arknir
()
Ответ на: комментарий от KRoN73

>>chown -R .??*

> Файл .x не впишется ;)


Согласен. Как вариант, chown -R .? .??*

И да, как уже не раз заметили, звезды/вопросы разворачиваются в список файлов шеллом, посему все то же самое справедливо для cp, mv и прочих команд (google://shell globbing или man sh, man bash, man zsh, man всякий_прочий_шелл на предмет этого глоббинга)

dexpl ★★★★★
()
Ответ на: комментарий от Cigarettesmoker

Если в операндах нет глобов (*,?), т.е. ты явно задаешь имена - то смысла нет. Оперировать файлами из шелл крайне не удобно, но если уж очень надо, то как минимум брать глобы в кавычки - хотя бы от пробелов в именах защитит.

LamerOk ★★★★★
()

> сменить владельца файлов, начинающихся с точки в текущей директории

find . -type f -name .* -exec chown user:group '{}' \;

так наверное будет круче всех

Komintern ★★★★★
()

try and compare:

ls .* -d | less

ls .[^.]* -d | less

gorilych ★★
()
Ответ на: комментарий от Komintern

> find . -type f -name .* -exec chown user:group '{}' \;

ты хоть сам пробовал, что написал?

во-первых, точку со звёздочкой надо закавычить, чтоб bash не делал expansion

во-вторых, find у тебя ищет рекурсивно, то есть не только в текущей директории, но и в поддиректориях. Забыт ключик -maxdepth

gorilych ★★
()
Ответ на: комментарий от gorilych

>find у тебя ищет рекурсивно

это ведь и требуется

>chown -R

record ★★★★★
()

>Если да, то как этого избежать

например, использовать find

sudo find dirname/ -type f -name ".*" -execdir chown someuser '{}' \;

Дисклеймер: запускайте на свой страх и риск, т.к. я тоже начинающий.

record ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.