ls
друкується по-різному, залежно від того, чи є вихід на термінал чи на щось інше.
наприклад:
$ ls .
file1 file2
$ ls . | head
file1
file2
Чи є якийсь спосіб зробити ls
друк на одному рядку, як ніби він до терміналу, коли його немає. Є -C
аргумент, що сорта робить це, але це розділить його на кілька рядків.
$ ls
file1 file10 file11 file12 file13 file14 file15 file16 file17 file18 file19 file2 file3 file4 file5 file6 file7 file8 file9
$ ls -C . | head
file1 file11 file13 file15 file17 file19 file3 file5 file7 file9
file10 file12 file14 file16 file18 file2 file4 file6 file8
Причиною, що я хочу це зробити, є те, що я хочу контролювати файли в каталозі, які швидко змінювалися. Я сконструював цей простий командний рядок:
while [[ true ]] ; do ls ; done | uniq
Uniq заважає спамувати мій термінал і показувати лише зміни. Однак він друкував це все на різницьких лініях, що робило uniq непотрібним та збільшувало кількість шуму. Теоретично можна використати watch
для цього, але я хотів побачити файл, як тільки він з’явився / зник.
Це остаточне рішення:
while [[ true ]] ; do ls | tr '\n' ' ' ; done | uniq