Команда ls - переключить выходные строки на столбцы [closed]

Есть ли способ изменить вывод ls ? Обычно ls отображает что-то вроде этого:

something something1 something2 something3 

something4 something5 something6 something7

и я хотите, чтобы это было так:

1. something        5. something4
2. something1       6. something5
3. something2       7. something6
4. something3       8. something7

Есть ли какая-нибудь простая команда для обработки этого случая без использования циклов и множества строк кода?

-3
задан 26 June 2018 в 20:16

4 ответа

ls -C сортирует файлы в текущем каталоге по столбцам. Кроме того, вы можете ограничить ширину вывода с помощью -w. ls -x сортирует вывод в строках. (man ls дает вам много других вариантов.)

Итак, в вашем примере:

$ ls
something   something2  something4  something6
something1  something3  something5  something7
$ ls -x                                         # different ordering
something   something1  something2  something3
something4  something5  something6  something7
$ ls -C                                         # same as ls
something   something2  something4  something6
something1  something3  something5  something7
$ ls -C -w 30                                   # same as ls -w 30
something   something4
something1  something5
something2  something6
something3  something7

Кстати: вывод, приведенный в вашем вопросе, безусловно, не является выводом ls -l , но из ls.

5
ответ дан 26 June 2018 в 20:16

Чтобы получить 2 пронумерованных столбца, попробуйте:

ls | pr -2Tn
5
ответ дан 26 June 2018 в 20:16

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

Вот скрипт, который будет делать то, что вам нужно. Сохраните это в файл сценария оболочки ... Я назвал мой 'numberlist.sh'. Если вы хотите перечислить список файлов, измените свой рабочий каталог (cd) на эту папку, а затем вызовите этот скрипт с помощью 'sh /filepath/numberlist.sh'

#!/bin/bash

#set a count variable for loop
i=1
#set a formatting for printf
fmt="%-15s\n"
#get working directory
curdir=${PWD}/

#get list of files only, exclude directories
onlyfiles=$(ls -p $curdir | grep -v /)
#create temp file to hold list
tmpfile=$(mktemp /tmp/filelist.XXXXXX)
#iterate through list of files
#number them and add to tempfile
for item in $onlyfiles; do
    printf "$fmt" "$i"."$item" >> "$tmpfile"
    i=$(($i+1))
done

#print the list in columnar order
cat $tmpfile | column
#remove the temp file
rm $tmpfile
.
0
ответ дан 26 June 2018 в 20:16

Ответ JJOAO - что-то, о чем я не знал... кажется, что Вы могли сделать это также. Если бы Вы хотели предотвратить каталоги списка однако, то Вы сделали бы:

ls -l | grep -v / | pr -2n

Однако форматирование отличается, таким образом, оно повреждает длинные списки в "страницы".

Править: пропущенный-T опция. Это опустит "страницы". Таким образом, это - хороший вариант

0
ответ дан 29 October 2019 в 02:57

Другие вопросы по тегам:

Похожие вопросы: