adduser и usermod - это две разные утилиты, которые имеют общий факт, что оба могут добавить пользователя в группу.
Согласно man adduser
является более дружественным передним концом инструментам низкого уровня, таким как программы useradd, groupadd и usermod.Дополнительная информация:
man adduser: adduser, addgroup - добавить пользователя или группу к системному человеку usermod: usermod - изменить учетную запись пользователя [!d7 ]Или просто выполните:
ls -b |nl -s '. ' -w 1
1. a\ file\ with\ nonewline
2. a\ file\ with\nnewline
3. a\ file\ with\ space
4. afile
из man nl:
-s, --number-separator=STRING
add STRING after (possible) line number
-w, --number-width=NUMBER
use NUMBER columns for line numbers
Или просто выполните:
ls -b |nl -s '. ' -w 1
1. a\ file\ with\ nonewline
2. a\ file\ with\nnewline
3. a\ file\ with\ space
4. afile
из man nl:
-s, --number-separator=STRING
add STRING after (possible) line number
-w, --number-width=NUMBER
use NUMBER columns for line numbers
Или просто выполните:
ls -b |nl -s '. ' -w 1
1. a\ file\ with\ nonewline
2. a\ file\ with\nnewline
3. a\ file\ with\ space
4. afile
из man nl:
-s, --number-separator=STRING
add STRING after (possible) line number
-w, --number-width=NUMBER
use NUMBER columns for line numbers
Вы должны передать вывод ls другой команде. Мое предложение состоит в том, чтобы использовать awk следующим образом:
$ ls -b --group-directories-first | awk '{print NR ". " $0}'
1. dir1
2. dir2
3. dir3
4. z-dir1
5. z-dir2
6. z-dir3
7. file1
8. file2
9. file3
10. file4
11. file5
12. file6
13. file7
14. file\nnewline
Обратите внимание, что файл file\nnewline содержит символ новой строки \n в своем имени, который экранирован опцией -b. опция --group-directories-first выведет каталоги перед файлами. Еще один возможный способ - использовать для цикла (но в этом случае поставить каталоги в попрошайничестве списка станет сложнее):
n=1; for i in *; do echo $((n++)). $i; done
, если просто указывать номер, то у вас есть несколько вариантов, как показано ниже, а также ваш less -N способ:
$ ls |cat -n
$ ls |nl
Если вы хотите настроить нумерацию выходных данных, я бы предложил используйте find и делайте все, что хотите напечатать:
find . -exec bash -c 'for fnd; do printf "%d. %s\n" "$((++i))" "$fnd"; done ' _ {} +
POSIXly, вы бы сделали:
find . -exec sh -c 'for fnd; do i=$((i+1)); printf "%d.\t%s\n" "$i" "$fnd"; done ' _ {} +
Вы также можете сделать это полностью с помощью короткого сценария Bash:
#!/bin/bash
set -eu
shopt -s nullglob
[ "$#" -eq 0 ] || cd -- "$1"
i=0
for f in *; do
printf '%d. %s\n' "$((++i))" "${f//$'\n'/^N}"
done |
cat -vt
Вы даже можете быть фантастическим и нанести номер строки более чем на 9 результатов:
#!/bin/bash
set -eu
shopt -s nullglob
[ "$#" -eq 0 ] || cd -- "$1"
ls=(*)
pad=${#ls[@]}
pad=${#pad}
i=0
for f in *; do
printf '%*d. %s\n' "$pad" "$((++i))" "${f//$'\n'/^N}"
done |
cat -vt
[d2 ] Использование Предполагая, что вы сохранили скрипт как исполняемый файл numbered-ls.sh в текущем рабочем каталоге:
./numbered-ls.sh [DIRECTORY]
Аргумент DIRECTORY является необязательным и по умолчанию используется текущий рабочий каталог.
Вы также можете сделать это полностью с помощью короткого сценария Bash:
#!/bin/bash
set -eu
shopt -s nullglob
[ "$#" -eq 0 ] || cd -- "$1"
i=0
for f in *; do
printf '%d. %s\n' "$((++i))" "${f//$'\n'/^N}"
done |
cat -vt
Вы даже можете быть фантастическим и нанести номер строки более чем на 9 результатов:
#!/bin/bash
set -eu
shopt -s nullglob
[ "$#" -eq 0 ] || cd -- "$1"
ls=(*)
pad=${#ls[@]}
pad=${#pad}
i=0
for f in *; do
printf '%*d. %s\n' "$pad" "$((++i))" "${f//$'\n'/^N}"
done |
cat -vt
Предполагая, что вы сохранили скрипт как исполняемый файл numbered-ls.sh в текущем рабочем каталоге:
./numbered-ls.sh [DIRECTORY]
Аргумент DIRECTORY является необязательным и по умолчанию используется текущий рабочий каталог.
, если просто указывать номер, то у вас есть несколько вариантов, как показано ниже, а также ваш less -N способ:
$ ls |cat -n
$ ls |nl
Если вы хотите настроить нумерацию выходных данных, я бы предложил используйте find и делайте все, что хотите напечатать:
find . -exec bash -c 'for fnd; do printf "%d. %s\n" "$((++i))" "$fnd"; done ' _ {} +
POSIXly, вы бы сделали:
find . -exec sh -c 'for fnd; do i=$((i+1)); printf "%d.\t%s\n" "$i" "$fnd"; done ' _ {} +
Вы должны передать вывод ls другой команде. Мое предложение состоит в том, чтобы использовать awk следующим образом:
$ ls -b --group-directories-first | awk '{print NR ". " $0}'
1. dir1
2. dir2
3. dir3
4. z-dir1
5. z-dir2
6. z-dir3
7. file1
8. file2
9. file3
10. file4
11. file5
12. file6
13. file7
14. file\nnewline
Обратите внимание, что файл file\nnewline содержит символ новой строки \n в своем имени, который экранирован опцией -b. опция --group-directories-first выведет каталоги перед файлами. Еще один возможный способ - использовать для цикла (но в этом случае поставить каталоги в попрошайничестве списка станет сложнее):
n=1; for i in *; do echo $((n++)). $i; done
Вы также можете сделать это полностью с помощью короткого сценария Bash:
#!/bin/bash
set -eu
shopt -s nullglob
[ "$#" -eq 0 ] || cd -- "$1"
i=0
for f in *; do
printf '%d. %s\n' "$((++i))" "${f//$'\n'/^N}"
done |
cat -vt
Вы даже можете быть фантастическим и нанести номер строки более чем на 9 результатов:
#!/bin/bash
set -eu
shopt -s nullglob
[ "$#" -eq 0 ] || cd -- "$1"
ls=(*)
pad=${#ls[@]}
pad=${#pad}
i=0
for f in *; do
printf '%*d. %s\n' "$pad" "$((++i))" "${f//$'\n'/^N}"
done |
cat -vt
Предполагая, что вы сохранили скрипт как исполняемый файл numbered-ls.sh в текущем рабочем каталоге:
./numbered-ls.sh [DIRECTORY]
Аргумент DIRECTORY является необязательным и по умолчанию используется текущий рабочий каталог.
, если просто указывать номер, то у вас есть несколько вариантов, как показано ниже, а также ваш less -N способ:
$ ls |cat -n
$ ls |nl
Если вы хотите настроить нумерацию выходных данных, я бы предложил используйте find и делайте все, что хотите напечатать:
find . -exec bash -c 'for fnd; do printf "%d. %s\n" "$((++i))" "$fnd"; done ' _ {} +
POSIXly, вы бы сделали:
find . -exec sh -c 'for fnd; do i=$((i+1)); printf "%d.\t%s\n" "$i" "$fnd"; done ' _ {} +
Вы должны передать вывод ls другой команде. Мое предложение состоит в том, чтобы использовать awk следующим образом:
$ ls -b --group-directories-first | awk '{print NR ". " $0}'
1. dir1
2. dir2
3. dir3
4. z-dir1
5. z-dir2
6. z-dir3
7. file1
8. file2
9. file3
10. file4
11. file5
12. file6
13. file7
14. file\nnewline
Обратите внимание, что файл file\nnewline содержит символ новой строки \n в своем имени, который экранирован опцией -b. опция --group-directories-first выведет каталоги перед файлами. Еще один возможный способ - использовать для цикла (но в этом случае поставить каталоги в попрошайничестве списка станет сложнее):
n=1; for i in *; do echo $((n++)). $i; done