Как получить список файлов и файлов-симлинков в виде списка?

Языки программирования, IDE, компиляторы, интерпретаторы, гипервизоры и виртуальные среды
Правила форума
Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Версия ОС вместе с разрядностью. Пример: LM 18.1 x64, LM Sarah x32 2. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 3. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 4. Суть. Желательно с выводом консоли, логами. 5. Скрин. Просьба указывать 1, 2 и 3 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
root
Сообщения: 942
Зарегистрирован: 16 фев 2017, 17:03
Решено: 5
Откуда: г. Хабаровск
Благодарил (а): 283 раза
Поблагодарили: 258 раз

Как получить список файлов и файлов-симлинков в виде списка?

Сообщение root » 20 авг 2018, 08:46

Дано: Допустим имеем на входе параметр ~
Задача:
1) Вывести пути (или названия) файлов в ~ в виде списка (т.е. с переходом на новую строку) в терминал
2) Вывести пути (или названия) файлов и файлов-симлинков (т.е. симлинки на папки в расчет не берем) в ~ в виде списка в терминал
Условие: вхождение только в родительскую папку ~, т.е. без рекурсии.

Как реализовать в терминале/скрипте? :smile:

Решение Chocobo » 20 авг 2018, 09:50
root писал(а):
20 авг 2018, 09:40
без рекурсии.
нутк есть -maxdepth у файнда)

Перейти к ответу ➙
Вы не готовы! :pc2:
Изображение

Аватара пользователя

Chocobo
Сообщения: 9071
Зарегистрирован: 27 авг 2016, 19:57
Решено: 197
Откуда: НН
Благодарил (а): 624 раза
Поблагодарили: 2582 раза

Как получить список файлов и файлов-симлинков в виде списка?

Сообщение Chocobo » 20 авг 2018, 09:08

root, юзай find

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

▶ touch /tmp/tmp/file1
▶ ln -s /tmp/tmp/file1 /tmp/tmp/link1                                                                                     
▶ ls -l /tmp/tmp                                                                                                          
-rw-rw-r-- 1 chocobo chocobo  0 авг 20 12:03 file1
lrwxrwxrwx 1 chocobo chocobo 14 авг 20 12:03 link1 -> /tmp/tmp/file1
root писал(а):
20 авг 2018, 08:46
ывести пути (или названия) файлов в ~ в виде списка (т.е. с переходом на новую строку) в терминал

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

▶ find  /tmp/tmp/ -type f -printf %f\\n\\r  
file1
root писал(а):
20 авг 2018, 08:46
2) Вывести пути (или названия) файлов и файлов-симлинков (т.е. симлинки на папки в расчет не берем) в ~ в виде списка в терминал

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

▶ find -L /tmp/tmp/ -type f -printf %f\\n\\r
file1
link1

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

       -L     Follow  symbolic  links.   When find examines or prints information about files, the information used shall be
              taken from the properties of the file to which the link points, not from the link itself (unless it is a  bro‐
              ken symbolic link or find is unable to examine the file to which the link points).  Use of this option implies
              -noleaf.  If you later use the -P option, -noleaf will still be in effect.  If -L is in effect and  find  dis‐
              covers  a  symbolic link to a subdirectory during its search, the subdirectory pointed to by the symbolic link
              will be searched.
Изображение
   
Изображение

Аватара пользователя

WWolf
Сообщения: 1003
Зарегистрирован: 13 фев 2018, 21:51
Решено: 4
Откуда: Краснодар
Благодарил (а): 365 раз
Поблагодарили: 237 раз

Как получить список файлов и файлов-симлинков в виде списка?

Сообщение WWolf » 20 авг 2018, 09:16

ls -1s | grep 'N'
где N = 4 - папка, >4 файл, 0 симлинк


неее... фигня... по другому признаку надо фильтровать и ещё штудировать man ls

Аватара пользователя

Автор темы
root
Сообщения: 942
Зарегистрирован: 16 фев 2017, 17:03
Решено: 5
Откуда: г. Хабаровск
Благодарил (а): 283 раза
Поблагодарили: 258 раз

Как получить список файлов и файлов-симлинков в виде списка?

Сообщение root » 20 авг 2018, 09:40

Chocobo, find - рекурсивная программа. Т.е. фильтровать вывод, грубо говоря, / - непрофитно. И твой код здесь find /tmp/tmp/ -type f -printf %f\\n\\r входит в подпапки и выводит только название файлов. А find -L /tmp/tmp/ -type f -printf %f\\n\\r вовсе начинает "гулять" по содержимому симлинка на папку из-за опции -L.

Это не подходит, потому что:
root писал(а):
20 авг 2018, 08:46
Условие: вхождение только в родительскую папку ~, т.е. без рекурсии.
-----------------
WWolf писал(а):
20 авг 2018, 09:16
ls -1
Выводит папки, нужны только файлы и "файлы и симлинк-файлы"
Вы не готовы! :pc2:
Изображение

Аватара пользователя

Chocobo
Сообщения: 9071
Зарегистрирован: 27 авг 2016, 19:57
Решено: 197
Откуда: НН
Благодарил (а): 624 раза
Поблагодарили: 2582 раза

Как получить список файлов и файлов-симлинков в виде списка?

Сообщение Chocobo » 20 авг 2018, 09:50

root писал(а):
20 авг 2018, 09:40
без рекурсии.
нутк есть -maxdepth у файнда)
Изображение
   
Изображение

Аватара пользователя

Автор темы
root
Сообщения: 942
Зарегистрирован: 16 фев 2017, 17:03
Решено: 5
Откуда: г. Хабаровск
Благодарил (а): 283 раза
Поблагодарили: 258 раз

Как получить список файлов и файлов-симлинков в виде списка?

Сообщение root » 20 авг 2018, 09:57

Chocobo, perfect! Никогда больше не буду читать man-ы через интернет (в родном man-е есть эта опция, а здесь http://www.opennet.ru/man.shtml?category=1&topic=find, например, её нет = устаревшая информация). Спасибо, выручил!) А то так бы и бился головой о стену) :dash2:
Вы не готовы! :pc2:
Изображение

Вернуться в «Программирование, скриптинг, виртуализация»