LinuxForum.Fans
Тема

Помогите со скриптом

Автор: NegativeCreep 13 сообщений 2028 просмотров
#105367

Подскажите пожалуйста
Почему такой скрипт на shell:

for i in /home
do
echo $i
done

Будет печает /home, а не список файлов в этой директории. Не надо предлагать команду ls, мне нужно именно циклом.
И как сделать, чтобы печатал список файлов.
Буду очень признаателен.
P.S. Прошу отнестись с пониманием, пишу на shell второй день.

#105386

#!/bin/sh
for i in $(ls) /home
do
echo $i
done
Так тоже не устраивает??

#105387
NegativeCreep написал:
Будет печает /home, а не список файлов в этой директории

Там нет файлов.
Напрмер в папке user вывести (по шаблонам): каталоги - * ; скрытые файлы - .* ; файлы с расширениями - *.* :

for i in /home/user/* ; do
echo $i
done

#105389
text

for i in /home/*
do
echo $i
done

Если нужна рекурсия, то

text

for i in /home/*/*
do
echo $i
done
#105396

Проблема решена, помогло указывать $(ls) вместо /home, сменив перед этим директорию на нужную.
Всем спасибо!

#105400
NegativeCreep написал:
Не надо предлагать команду ls, мне нужно именно циклом.
NegativeCreep написал:
Проблема решена, помогло указывать $(ls) вместо /home, сменив перед этим директорию на нужную.

oO
А не проще в таком случае (если с файлами нужно что-то сделать, смотрим man find опция -exec)

text

find /home
#105404
Lupo Alberto написал:
[quote=NegativeCreep]Не надо предлагать команду ls, мне нужно именно циклом.
NegativeCreep написал:
Проблема решена, помогло указывать $(ls) вместо /home, сменив перед этим директорию на нужную.

oO
А не проще в таком случае (если с файлами нужно что-то сделать, смотрим man find опция -exec)

text

find /home

[/quote]
Извиняюсь за путаницу. Я имел в виду, что можно было просто задать команду "ls" и получить нужный список файлов, задание более сложное, но начать хочу с простого, поэтому нужен цикл)

LupoAlberto написал:
А не проще в таком случае (если с файлами нужно что-то сделать, смотрим man find опция -exec)

find /home

Вот этот вариант не очень понял. find -exec /home найдет все файлы каталога /home. А как заставить по ним проходить цикл?

#105407

NegativeCreep, не берусь утверждать насчёт цикла, но, к примеру, следующая команда поменяет права всем директориям в целевом каталоге:

text

find /home -type d -exec chown 750 {} \;

Не до конца понятна стоящая перед вами цель, отсюда и путаница :o

#105419

Вообще надо написать скрипт, который раз в определенный промежуток времени удаляет в каталоге файлы, содержащие определенную текстовую последовательность.
Промежуток времени, каталог, текстовая последовательность - параметры скрипта.

Но начать решил с малого smile

#105423

Примерно так:

text

#!/bin/sh
TIMEOUT=$1
TEXTPATTERN=$2
SEARCHDIR=$3
touch tmp.txt
sleep $TIMEOUT
find $SEARCHDIR -newer tmp.txt -exec grep $TEXTPATTERN {} \; -delete

В качестве параметров скрипту задаются временная задержка в секундах, образец текста, директорий поиска.
P.S. Может даже и работает oO

#105426

Съезжайте на sh.

text
 `ls /home`
#105427

Тоже может быть работает :o

text

#!/bin/sh
TIMEOUT=$1
TEXTPATTERN=$2
SEARCHDIR=$3
while :
do
   sleep $TIMEOUT
   rm -f $(grep $TEXTPATTERN -l $SEARCHDIR/*)
done
#105431
Lupo Alberto написал:
Тоже может быть работает :o
text

#!/bin/sh
TIMEOUT=$1
TEXTPATTERN=$2
SEARCHDIR=$3
while :
do
   sleep $TIMEOUT
   rm -f $(grep $TEXTPATTERN -l $SEARCHDIR/*)
done

Спасибо, работает.

Войдите или зарегистрируйтесь, чтобы ответить.