Выполните цикл по каталогу и выполните действия с файлами с определенными разрешениями в unix

#unix #sh

Вопрос:

Я хочу просмотреть каталог со многими подкаталогами, в которых есть скрытые файлы. Я хочу зациклить каталог и открывать только файлы, у которых есть определенные разрешения, в данном случае «drwx—- — T «.

Мой текущий сценарий

 #!/bin/sh
cd /z/vendors  #vendors has a list of directories which contain hidden files
for FILE in *; do
    if [ <what should i put here to select files with permission "drwx-----T ">]; then
        cd "$FILE" #and do something here e.g open the hidden files
        cd ..
    fi
done
 

Я не знаю, какое условие теста использовать, я знаю, что команда ls -l | grep "drwx-----T " перечислит нужные мне файлы, но как я могу включить это в if тест

Комментарии:

1. Используйте find -perm для сопоставления файлов с данным разрешением.

2. Я никогда не слышал о версии find без -perm .

3. У вас есть stat команда?

4. Мои плохие find ... -perm работы в системе, позвольте мне попробовать использовать ее

5. И используйте -type d для сопоставления каталогов.

Ответ №1:

Статус выхода grep указывает, соответствовал ли ввод шаблону. Так что вы можете использовать его в качестве условия в if .

 if ls -ld "$FILE" | grep -q -F 'drwx-----T '; then
    # do what you want
fi
 

-q Опция grep предотвращает печать совпадения и -F заставляет его соответствовать фиксированной строке, а не рассматривать ее как регулярное выражение ( имеет особое значение в регулярном выражении).

Комментарии:

1. Условие if работает, однако find ... -perm оно кажется более подходящим для этого, я виноват, что прокомментировал, что оно не работало

2. Не стесняйтесь публиковать свой собственный ответ, в котором показано, как это сделать find -perm .