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
Ответы:
я не знаю переключателя, который мог бы сделать это, но вы можете передать свой вывод через
tr
это:источник
Это работает для меня, это самый простой способ, который я когда-либо нашел. Надеюсь, это поможет вам.
источник
Если у вас
ls
есть эта опция, вы можете использовать высокое значение, и он может делать то, что вы хотите:источник
ах, теперь, когда вы обновили вопрос ....
будет делать то, что вы разместили, просто проще.
тем не менее, вам лучше использовать что-то, что использует inotify для этого .. как
если у вас нет inotify, то что-то вроде этого тоже хорошо работает:
источник
Как насчет довольно тривиальным
? :-) Вам не нужно даже раскошелиться на это. :-)
источник
Это может быть то, что вы ищете, но я, возможно, неправильно понял ваш вопрос, но здесь идет :)
Несколько команд, на которые стоит обратить внимание:
watch - периодически запускать программу, показывая вывод полноэкранного xargs - создавать и выполнять командные строки из стандартного ввода (-0, если вы хотите обрабатывать файлы с пробелами и т. д.)
Вы можете сделать что-то вроде следующего, чтобы показать последние 10 файлов / каталогов, которые изменились с интервалом в 2 секунды (по умолчанию для просмотра)
параметры -lart говорят ls быть многословным и сортировать в зависимости от времени модификации.
Если вы действительно хотите файлы, я бы сделал что-то вроде:
или просто отобразить их:
источник
Вы можете использовать обратные галочки в оболочке для достижения этой цели:
источник
touch ./-en
[a-d]
этого вида до него. Если вы запускаете его в скрипте,echo -E
это не будет слишком неудобно, и завершающий перевод строки может не иметь значения.Это сработало для меня, потому что мне нужно было не только напечатать результат в одну строку, но и мне нужно было указать, как его нужно разделить, и вы можете указать это с помощью ORS
источник