Есть ли способ изменить вывод 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
Есть ли какая-нибудь простая команда для обработки этого случая без использования циклов и множества строк кода?
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
.
Чтобы получить 2 пронумерованных столбца, попробуйте:
ls | pr -2Tn
Если вы планируете много использовать это и хотите последовательно нумеровать перечисленные элементы, я бы подумал о создании сценария, который можно вызывать при необходимости для этого.
Вот скрипт, который будет делать то, что вам нужно. Сохраните это в файл сценария оболочки ... Я назвал мой '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
. Ответ JJOAO - что-то, о чем я не знал... кажется, что Вы могли сделать это также. Если бы Вы хотели предотвратить каталоги списка однако, то Вы сделали бы:
ls -l | grep -v / | pr -2n
Однако форматирование отличается, таким образом, оно повреждает длинные списки в "страницы".
Править: пропущенный-T опция. Это опустит "страницы". Таким образом, это - хороший вариант