ls
wypisuje inaczej w zależności od tego, czy dane wyjściowe są wysyłane do terminala, czy do czegoś innego.
na przykład:
$ ls .
file1 file2
$ ls . | head
file1
file2
Czy jest jakiś sposób na ls
wydrukowanie w jednym wierszu, tak jakby to było do terminala, kiedy nie jest. Istnieje -C
argument, że sorta to robi, ale podzieli to na kilka linii.
$ 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
Powodem, dla którego chcę to zrobić, jest to, że chcę monitorować pliki w katalogu, który zmieniał się szybko. Zbudowałem tę prostą linię poleceń:
while [[ true ]] ; do ls ; done | uniq
Uniq zapobiega spamowaniu mojego terminala i pokazywaniu tylko zmian. Jednak drukował to wszystko na różnych liniach, co czyniło uniq bezużytecznym i zwiększało ilość szumu. Teoretycznie można to wykorzystać watch
, ale chciałem zobaczyć plik, jak tylko się pojawi / zniknie.
To jest ostateczne rozwiązanie:
while [[ true ]] ; do ls | tr '\n' ' ' ; done | uniq
Odpowiedzi:
nie znam przełącznika, który mógłby to zrobić, ale możesz przepuścić wyjście,
tr
aby to zrobić:źródło
To działa dla mnie, to najprostszy sposób, jaki kiedykolwiek znalazłem. Mam nadzieję, że to również pomoże.
źródło
Jeśli masz
ls
tę opcję, możesz użyć wysokiej wartości i może zrobić to, co chcesz:źródło
ah, teraz zaktualizowałeś pytanie ....
zrobi to, co napisałeś, po prostu prościej.
jednak lepiej jest użyć czegoś, co używa inotify, aby to zrobić
jeśli nie masz powiadomienia, wówczas coś podobnego również działa dobrze:
źródło
Co z dość trywialnym
? :-) Nie musisz nawet za to rozwidlać. :-)
źródło
To może być to, czego szukasz, ale mogłem źle zrozumieć twoje pytanie, ale oto idzie :)
Kilka poleceń, na które warto spojrzeć:
watch - okresowo uruchamiaj program, wyświetlając wyjściowe pełnoekranowe xargs - buduj i wykonuj wiersze poleceń ze standardowego wejścia (-0, jeśli chcesz obsługiwać pliki ze spacjami itp.)
Możesz wykonać następujące czynności, aby wyświetlić 10 ostatnich plików / katalogów, które zmieniły się w odstępie 2 sekund (domyślnie dla zegarka)
opcje -lart informują ls, że jest gadatliwy i sortuje według czasu modyfikacji.
Jeśli naprawdę chcesz tylko pliki, zrobiłbym coś takiego:
lub po prostu je wyświetlić:
źródło
Możesz użyć tylnych kleszczy w powłoce, aby to osiągnąć:
źródło
touch ./-en
[a-d]
tego rodzaju przed nim. Jeśli uruchamiasz go w skrypcieecho -E
, nie byłoby to zbyt niewygodne, a końcowy znak nowej linii może nie mieć znaczenia.To działało dla mnie, ponieważ musiałem nie tylko wydrukować wynik w jednym wierszu, ale także musiałem określić, w jaki sposób należy go rozdzielić, a można to określić za pomocą ORS
źródło