web-dev-qa-db-ja.com

lsにすべてを1行で出力させる(ターミナルの場合と同様)

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
16
Rory

それができるスイッチは知りませんが、trを介して出力をパイプすることで実行できます。

ls | tr "\n" " " | <whatever you like>
15
Christian
ls | xargs

それは私にとってはうまくいく、それは私が今までに見つけた最も簡単な方法です。これがあなたにも役立つことを願っています。

19
Jian Weihang

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)
4
Justin

かなり些細なことはどうですか

echo *

? :-)フォークする必要すらありません。 :-)

結果は1行で出力するだけでなく、どのように区切るかを指定する必要があり、[〜#〜] ors [ 〜#〜]

ls -1 | awk '{ ORS="|"; print; }'
0
mavi

これはあなたが探しているものかもしれませんが、私はあなたの質問を誤解しているかもしれませんが、ここに行きます:)

調べる価値のあるいくつかのコマンド:

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

0
ScottZ

シェルでバックティックを使用して、次のようにこれを実現できます。

echo -E `ls -1`
0
chicks