ls
は、出力先が端末であるか他の何かであるかに応じて、印刷方法が異なります。
例えば。:
$ ls .
file1 file2
$ ls . | head
file1
file2
ls
を1行に出力する方法はありますか?あります -C
sortaの引数ですが、数行に分割されます。
$ 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 | tr "\n" " " | <whatever you like>
ls | xargs
それは私にとってはうまくいく、それは私が今までに見つけた最も簡単な方法です。これがあなたにも役立つことを願っています。
ls
にこのオプションがある場合、高い値を使用でき、必要な処理を実行できます。
ls -w 10000 -C . | head
ああ、あなたは質問を更新したので...
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)
かなり些細なことはどうですか
echo *
? :-)フォークする必要すらありません。 :-)
結果は1行で出力するだけでなく、どのように区切るかを指定する必要があり、[〜#〜] ors [ 〜#〜]
ls -1 | awk '{ ORS="|"; print; }'
これはあなたが探しているものかもしれませんが、私はあなたの質問を誤解しているかもしれませんが、ここに行きます:)
調べる価値のあるいくつかのコマンド:
watch-プログラムを定期的に実行し、出力フルスクリーンxargsを表示します-標準入力からコマンドラインを構築して実行します(スペースなどのファイルを処理する場合は-0)
次のようにして、2秒間隔で変更された最後の10個のファイル/ディレクトリを表示できます(監視のデフォルト)。
「ls -lart |テール-10」を見る
オプション-lartは、変更時間に基づいてlsを冗長かつソートするように指示します。
ファイルが本当に必要な場合は、次のようにします。
「ls -lart | awk '{print\$ 8}' | tail -10 | xargs」を見る
または単にそれらを表示する:
ls -lart | awk '{print $ 8}' |尾-10 | xargs
シェルでバックティックを使用して、次のようにこれを実現できます。
echo -E `ls -1`