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