Помещение команды поиска в качестве псевдонима - PullRequest
0 голосов
/ 02 сентября 2011

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

alias fixpermissions='cd ~/public_html/wp-content/themes/presstheme; find . -type f -exec chmod 644 {} \; find . -type d -exec chmod 755 {} \; cd'

Однако, когда я запускаю это, я получаю:

find: paths must precede expression

Эти команды поиска прекрасно работают в оболочке. Есть ли что-то особенное, что вы должны сделать, чтобы запускать команды как псевдонимы?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 02 сентября 2011

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

 alias fixpermissions='cd ~/public_html/wp-content/themes/presstheme; find . -type f -exec chmod 644 {} \; ; find . -type d -exec chmod 755 {} \; ; cd'

Вы можете пуленепробиваемым образом проверить ваш псевдоним, чтобы выполнять поиск в каталоге prestheme, только если он существует (с учетом случая перемещения ваших псевдонимов на другие машины), выполнив каждую команду после cd условно, то есть

 alias fixpermissions='cd ~/public_html/wp-content/themes/presstheme && find . -type f -exec chmod 644 {} \; && find . -type d -exec chmod 755 {} \; && cd'

Надеюсь, это поможет.

2 голосов
/ 02 сентября 2011

Вам нужны дополнительные точки с запятой, чтобы отделить две команды поиска от их окружения:

alias fixpermissions='cd ~/public_html/wp-content/themes/presstheme; find . -type f -exec chmod 644 {} \; ; find . -type d -exec chmod 755 {} \; ; cd'

Вы можете извлечь выгоду из использования вложенной оболочки; тогда вам не нужен последний cd (который возвращает вас домой, а не туда, откуда вы пришли):

alias fixpermissions='( cd ~/public_html/wp-content/themes/presstheme; find . -type f -exec chmod 644 {} \; ; find . -type d -exec chmod 755 {} \; )'

И, поскольку я начал использовать оболочки до появления псевдонимов, я превратил это в разборчивый скрипт в каталоге bin:

cd ~/public_html/wp-content/themes/presstheme
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;

и, вероятно, я бы тоже его параметризировал:

cd ${1:-"~/public_html/wp-content/themes/presstheme"}
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;

Тогда я мог бы указать другой каталог, если бы захотел, но по умолчанию он был бы «нормальным».

1 голос
/ 02 сентября 2011

Вам не хватает точки с запятой, заканчивающей первую команду поиска.Вы указали только точку с запятой, которая завершает команду chmod.

alias fixpermissions='find ~/public_html/wp-content/themes/presstheme -type f -exec chmod 644 {} \; ; find ~/public_html/wp-content/themes/presstheme -type d -exec chmod 755 {} \; cd'
0 голосов
/ 02 сентября 2011

Я думаю, возможно, вам следует использовать Функции Bash , чтобы сделать его более читабельным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...