diff -u <(ls dir1) <(ls dir2)
Это гарантирует, что diff
не заглядывает внутрь подкаталогов.
Или попробуйте это, если вы смелы;)
diff -u <(find dir1/ -maxdepth 1 -type d -exec basename {} \;) <(find dir2/ -maxdepth 1 -type d -exec basename {} \;)
Вам никогда не придется рассчитывать количество необходимых строк. Вам просто нужно убедиться, что вы вставляете новые строки после каждого числа $cols
.
Использование seq
иawk
:
$ num=28
$ cols=6
$ seq "$num" | awk -v cols="$cols" '{ printf "%-4d", $1 } NR % cols == 0 { printf "\n" } END { printf "\n" }'
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28
Это печатает каждую цифру, считанную из seq
, как выровненное по левому краю -десятичное число, допуская четыре символа ширины для каждого, без завершающей новой строки. Затем он выводит новую строку после каждого напечатанного ряда чисел и в самом конце.
Использование инструмента rs
:
$ num=28
$ cols=6
$ seq "$num" | rs 0 "$cols"
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28
Если вам нужно сделать это с помощью цикла оболочки, например,.bash
:
$ num=28
$ cols=6
$ for ((i=1; i<=num; ++i)); do printf '%-4d' "$i"; (( i%cols == 0 )) && echo; done; echo
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28
Это имитирует код awk
в начале.