Проблемы в BASH

Модератор: Модераторы разделов

Ответить
Anonymouss
Сообщения: 6

Проблемы в BASH

Сообщение Anonymouss »

Здравствуйте,
Нужно написать скрипт, который печатал бы в файл путь к файлу, а затем его (файла) имя.
То есть должно выглядеть примерно так :
./Documents/important/file1
./Documents/important/file2
./Documents/file3
и так далее

Надо, чтобы были написаны все файлы, которые находятся (рекурсивно) в заданной директории.

Я написал так (как промежуточный момент)

Код: Выделить всё

#!/bin/bash
ls -R1>text.tmp

amount=`wc -l text.tmp|awk '{print $1}'` # количество строк в файле -работает
i=1
Path=no

while  [ "$Path" = "no" ]
do
n=` sed '$i!d' text.tmp ` # выводит одну строку из списка  - работает

echo $n
second=${n:1:2} # второй символ в строке- не работает

echo $second
slash=\\
if [[ "$second" = "$slash" ]]
then Path=$n

else i=$i+1
fi
done
exit 0
echo $Path


Проблема в том, что та переменная, которая должна быть равна второму символу в строке всегда равна двоеточию, более того компьютер сначала выписывает все имена файлов, а только затем переменную второго символа и так заново.
Обьясните, пожалуйста, почему так происходит и как можно исправить.
Заранее спасибо
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Проблемы в BASH

Сообщение Bizdelnick »

Скрипт? man find

Anonymouss писал(а):
14.12.2016 20:20
ls -R1

Во-первых, так Вы не получите путь до файла, а во-вторых, ls искажает некоторые символы в именах файлов. Генерируемый им список файлов годится только для чтения глазами, но не для парсинга.

Anonymouss писал(а):
14.12.2016 20:20
second=${n:1:2} # второй символ в строке- не работает

Второй символ в строке — это ${n:1:1}.

Anonymouss писал(а):
14.12.2016 20:20
slash=\\

Если Вы подразумевали разделитель в пути, то это /, и я не вижу никакого смысла держать его в переменной.

Anonymouss писал(а):
14.12.2016 20:20
else i=$i+1

Это так не работает.

Вообще я ни черта в Вашем скрипте не понял. Вы что-то слишком мудрёное пытались соорудить, и сами запутались.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Anonymouss
Сообщения: 6

Re: Проблемы в BASH

Сообщение Anonymouss »

Bizdelnick писал(а):
14.12.2016 21:11
Скрипт? man find

Anonymouss писал(а):
14.12.2016 20:20
ls -R1

Во-первых, так Вы не получите путь до файла, а во-вторых, ls искажает некоторые символы в именах файлов. Генерируемый им список файлов годится только для чтения глазами, но не для парсинга.

Anonymouss писал(а):
14.12.2016 20:20
second=${n:1:2} # второй символ в строке- не работает

Второй символ в строке — это ${n:1:1}.

Anonymouss писал(а):
14.12.2016 20:20
slash=\\

Если Вы подразумевали разделитель в пути, то это /, и я не вижу никакого смысла держать его в переменной.

Anonymouss писал(а):
14.12.2016 20:20
else i=$i+1

Это так не работает.

Вообще я ни черта в Вашем скрипте не понял. Вы что-то слишком мудрёное пытались соорудить, и сами запутались.


Вы не знаете, как можно проще выполнить то, что я пытался сделать? Я бы с радостью написал более простой скрипт, если бы знал как.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Проблемы в BASH

Сообщение Bizdelnick »

Я же написал. Это не скрипт, это одна команда.
Bizdelnick писал(а):
14.12.2016 21:11
man find

Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Anonymouss
Сообщения: 6

Re: Проблемы в BASH

Сообщение Anonymouss »

Господи! Спасибо большое, в шоке сейчас от того, что все настолько просто.
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Проблемы в BASH

Сообщение Vascom »

Anonymouss писал(а):
14.12.2016 20:20
Здравствуйте,
Нужно написать скрипт, который печатал бы в файл путь к файлу, а затем его (файла) имя.
...

И на будущее, для определённости в терминологии.
Путь к файлу - это полностью директория и имя файла, то есть

Код: Выделить всё

./Documents/important/file1

Где "./Documents/important/" - директория, "file1" - имя.
Спасибо сказали:
Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: Проблемы в BASH

Сообщение alkesta »

Vascom писал(а):
16.12.2016 11:57
Anonymouss писал(а):
14.12.2016 20:20
Здравствуйте,
Нужно написать скрипт, который печатал бы в файл путь к файлу, а затем его (файла) имя.
...

И на будущее, для определённости в терминологии.
Путь к файлу - это полностью директория и имя файла, то есть

Код: Выделить всё

./Documents/important/file1

Где "./Documents/important/" - директория, "file1" - имя.


Василий, а ты уверен, что сам разобрался в терминологии?
По-моему ./Documents/important/ - это путь, а не директория.
А Documents и important - это директории.
Спасибо сказали:
Ответить