LINUX.ORG.RU

из find dir -exec почему-то не работает test -d, -f и т.п


0

0

Бился весь, день, бошку поломал, понять не могу почему.

Вот примеры:

find . -exec echo chmod a`[ -f {} ] && echo + || echo -`x {} \;

всегда дает chmod a-x, хотя

find . -exec echo chmod a`[ 1 = 1 ] && echo + || echo -`x {} \;

дает chmod a+x, а

find . -exec echo chmod a`[ 1 = 0 ] && echo + || echo -`x {} \;

дает chmod a-x, как и положено. В чем косяк?

PS. echo добавил, чтоп не получилось у вас как с тем однострочником на перле :)


Re: из find dir -exec почему-то не работает test -d, -f и т.п

Это называется "оперировать гланды через жопу"
man find ; чтоб тебя ... !

sdio ★★★★★ ()

Re: из find dir -exec почему-то не работает test -d, -f и т.п

Да сделать можно сотней способов, не вопрос, дело не в том как добиться результата.
Вопрос в том, почему не работает `test -{d|f...}`, вот меня что интересует.

Az ()

Re: из find dir -exec почему-то не работает test -d, -f и т.п

>Кто тебе сказал, что find запускает shell для исполнения -exec команд?

Ну строго говоря никто не говорил, однако конструкции вида
find . -exec echo `echo {}` \;

и даже
find . -exec echo '`echo {}`' \;

нормально работают.

Az ()

Re: из find dir -exec почему-то не работает test -d, -f и т.п

Показалось? Я же специально второй вариант написал, в котором `` закрыты ''. Ты перед тем как писать хоть проверил бы чтоль.

[sergio@az 1]$ mkdir test_dir
[sergio@az 1]$ touch test_file
[sergio@az 1]$ find . -exec echo '`echo {}`' \;
`echo .`
`echo ./test_dir`
`echo ./test_file`
[sergio@az 1]$ find . -exec echo `echo {}` \;
.
./test_dir
./test_file


т.е. expansion делает-таки не один раз, а каждый раз. И каждый раз {} find заменяет на то, что надо.

Az ()

Re: из find dir -exec почему-то не работает test -d, -f и т.п

Еще интересней:

[sergio@az 1]$ find . -exec echo `file {}` \;
.: Can't stat `.' (No such file or directory)
./test_dir: Can't stat `./test_dir' (No such file or directory)
./test_file: Can't stat `./test_file' (No such file or directory)
[sergio@az 1]$ find $PWD -exec echo `file {}` \;
/home/sergio/1: Can't stat `/home/sergio/1' (No such file or directory)
/home/sergio/1/test_dir: Can't stat `/home/sergio/1/test_dir' (No such file or directory)
/home/sergio/1/test_file: Can't stat `/home/sergio/1/test_file' (No such file or directory)

Az ()

Re: из find dir -exec почему-то не работает test -d, -f и т.п

Ты так ничего и не понял.


find . -exec echo `echo {}` \; 
перед запуском преобразуется в 
find . -exec echo {} \;  и все тебе кажется красивым

find . -exec echo `file {}` \; 
Это раскрывается до
find . -exec echo {}: ERROR: cannot open `{}' (No such file or directory) \;
И ты получаешь то что ты привел в своем посте.

P.S. Ладно, кто-нибудь другой тебе объяснит.

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