Программирование оболочки Unix: добавьте пустую строку при печати - PullRequest
0 голосов
/ 23 марта 2011

Я пытаюсь перечислить все файлы в каталоге, но как бы вы отделили каждый из файлов пустой строкой? в основном каждый файл отображается через пустую строку? Я пытаюсь использовать цикл? Я пробовал несколько примеров, но ни один из них не работал, вставляя между ними пустые строки?

for i in ls  
do
echo "\n" && ls -l
done

for i in ls  
do
echo "\n" 
ls 
done

Ответы [ 5 ]

3 голосов
/ 23 марта 2011

Вот один из них:

find -printf '%p\n\n'

Немного хуже (но более портативный):

ls | sed 's|$|\n|'

Более запутанный:

ls | while read f; do
    echo "$f"
    echo
done

А вот что вы не должны делать :

for f in `ls`; do
    echo "$f"
    echo
done

EDIT:

И, как упомянуто Ниджа , простая оболочка только:

for f in *; do
    echo "$f"
    echo
done

У этого недостатка есть то, что во многих оболочках * по умолчанию расширяется до самого себя, а не до пустой строки, когда нет файлов.

1 голос
/ 23 марта 2011

sed однострочный (или однолинейный):

ls | sed G

Готово.

1 голос
/ 23 марта 2011

Для справки: http://www.cyberciti.biz/faq/bash-loop-over-file/

for f in /tmp/play/*
do
  echo $f
  echo
done

Отредактировано в соответствии с комментариями, делая его проще.

0 голосов
/ 23 марта 2011

Не уверен, насколько переносимы параметры -d и -t, но pr вездесущ:

$ ls | pr -dt

Обратите внимание, что для любых имен файлов со встроенным возвратом каретки в вывод добавляется дополнительный возврат каретки.,(Я полагаю, что проблема возникает со всеми представленными решениями.)

0 голосов
/ 23 марта 2011

Ваши петли близки. Однако использование традиционного цикла bash for с ls опасно - что произойдет, если ваши имена файлов содержат пробелы? Простое решение с awk:

ls | awk '{ print $0 "\n" }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...