#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
.