LINUX.ORG.RU

Вывод файла с определенными правами доступа и расширением .sh

 ,


1

1

Здравствуйте. Собственно, требуется написать скрипт, который в домашнем каталоге ищет файлы с расширением .sh и правами доступа, заданными в виде аргумента командной строки в текстовом виде, например: -rw-r–r–. Результат должен быть строго в виде отсортированного списка имен файлов. Получается сделать только какую-то одну часть задания:

#!/bin/bash

ls -l | grep -e «$1» | grep «.sh$» | awk ‘{print $9}’ > result.txt

cat result.txt | sort

Этот скрипт выводит правильные файлы, вот только это по сути не поиск: будет просмотрена только домашняя папка и все. А если в каком-то вложенном каталоге будет подходящий файл, то он будет пропущен.

#!/bin/bash

find . -type f -printf «%f\n» | grep «.sh$» > result.txt

cat result.txt | sort

Данный вариант наоборот: ищет файлы с расширением .sh, вот только как find передать права доступа в текстовом виде? Поэтому этот вариант просто выводит файлы с расширением .sh Как найти все файлы в домашнем каталоге с правами доступа, которые задаются в виде строки?



Последнее исправление: an0nimka (всего исправлений: 2)

Задачи может решать разными способами. Ты можешь разобраться как find заставить искать файлы имеющие определённые права и определённое расширение. Либо сделать составное решение. То есть с помощью find ты ищешь файлы с определённым расширением дальше передаёшь их цикл в цикле читаешь выполняешь конструкцию которая у тебя описана выше.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87

Решить уже получилось. У ls нужно дополнительно задать -R чтобы он искал по всем подкаталогам. Осталось только в выводе удалить расширения у файлов.

an0nimka
() автор топика
Ответ на: комментарий от an0nimka

Если кому нужно, решение в итоге такое: ls -l -R | grep -e «$1» | grep «.sh$» | awk ‘{print $9}’ | sed ‘s/.$//’ | sed ‘s/.$//’ | sed ‘s/.$//’ > result$ cat result.txt | sort

3 раза sed - это чтобы удалить расширение .sh в выводе

an0nimka
() автор топика

Зачем ты ключ -e grep'у шлёшь?

grep «.sh$»

Ты в курсе что точка заменяется на любой символ?

3 раза sed - это чтобы удалить расширение .sh в выводе

А зачем 3 раза?

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

Потому, что он не знает, что нужно было написать

sed 's/\.sh$//gi'
kostik87 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.