ls
출력이 터미널로 출력되는지 아니면 다른 것으로 출력되는지에 따라 다르게 인쇄됩니다.
예:
$ ls .
file1 file2
$ ls . | head
file1
file2
ls
터미널이 아닌데 터미널에 있는 것처럼 한 줄에 인쇄 할 수 있는 방법이 있습니까 ? sorta가 그렇게 한다는 주장이 있지만 -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는 내 터미널에 스팸을 보내거나 변경 사항만 표시하는 것을 방지합니다. 그러나 그것은 모두 다른 라인에 인쇄되어 유니크를 쓸모 없게 만들고 소음의 양을 증가시켰습니다. 이론적으로는 watch
이것을 사용할 수 있지만 파일이 나타나거나 사라지자마자 파일을 보고 싶었습니다.
이것이 최종 해결책입니다:
while [[ true ]] ; do ls | tr '\n' ' ' ; done | uniq
답변1
그렇게 할 수 있는 스위치는 모르지만 출력을 파이프로 연결하면 됩니다 tr
.
ls | tr "\n" " " | <whatever you like>
답변2
ls | xargs
그것은 나에게 효과적이며 내가 찾은 가장 간단한 방법입니다. 이것이 당신에게도 도움이 되기를 바랍니다.
답변3
이 옵션이 있는 경우 ls
높은 값을 사용하면 원하는 작업을 수행할 수 있습니다.
ls -w 10000 -C . | head
답변4
아, 이제 질문을 업데이트하셨으니....
while true ; do echo * ; done | uniq
당신이 게시한 것을 더 간단하게 수행할 것입니다.
그러나 이 작업을 수행하려면 inotify를 사용하는 것을 사용하는 것이 더 좋습니다.
inotifywait -m . -e create,delete
inotify가 없으면 다음과 같은 것도 잘 작동합니다.
import os
import time
last = set()
while True:
cur = set(os.listdir('.'))
added = cur-last
removed = last-cur
if added: print 'added', added
if removed: print 'removed', removed
last = set(os.listdir('.'))
time.sleep(0.1)