результаты ls в одну строку, когда вывод идет в файл - PullRequest
1 голос
/ 29 февраля 2020

ls возвращает файлы в строке при подключении к stdout.

$ ls
a b c

при перенаправлении в файл

$ ls > foo.txt
$ cat foo.txt
a
b
c

Я понимаю, что опция -C

$ ls -C > hoge.txt
$ cat hoge.txt
a b c

Однако, если в списке файлов много, ls помещает возврат каретки в список. как

 a b c d e f g h
 i j k l ....

Как я могу иметь

 a b c d e f g h i j k l.....(without \n)

Ответы [ 3 ]

2 голосов
/ 29 февраля 2020

Я не знаю, если ls предоставляет опцию для этого, и я не смотрел его. Поскольку этот вопрос конкретно не требует очень быстрого или эффективного с точки зрения вычислений решения, я рекомендую синтезировать команду, используя ls и sed:

ls "$dir" | sed -z 's/\n/ /g'

. Требуется вывод ls и замена. все новые строки \n с пробелами. Переключатель -z необходим, потому что в противном случае sed будет работать с ориентацией на строки, а средство сопоставления с шаблоном sed никогда не увидит \n. У вас возникнет проблема, если одно из ваших имен файлов в $dir будет содержать пробелы.

Если важна вычислительная эффективность, я рекомендую поискать такую ​​опцию (man ls) или написать программу, которая делает именно это (используя, например, язык C).

1 голос
/ 29 февраля 2020

Это поможет:

ls | xargs > foo.txt
1 голос
/ 29 февраля 2020

Попробуйте приведенное ниже решение,

echo -E $(ls -1 dir) > file.txt

, где

-1 печать o / p в один столбец

-E отключить интерпретацию backsla sh escape

Источник: это страница отказа сервера

...