lsですべてを1行に出力します(ターミナルのように)


12

ls 出力が端末または他の何かのどちらであるかによって、印刷が異なります。

例えば:

$ ls .
file1  file2
$ ls . | head
file1
file2

ls端末ではないときに1行で印刷する方法がありますか?-Csortaがそれを行う引数がありますが、それはいくつかの行に分割します。

$ 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

4
lsを別のコマンドにパイプしている場合、何か間違ったことをしていることになります。実際に何を達成しようとしていますか?
ジャスティン

ジャスティン、質問を説明付きで更新しました。
ロリー

回答:


16

私はそれを行うことができるスイッチを知りませんが、あなたtrはそれを行うために出力をパイプすることができます:

ls | tr "\n" " " | <whatever you like>

14
ls | xargs

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



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)


0

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

検討する価値があるいくつかのコマンド:

watch-プログラムを定期的に実行し、出力を全画面表示xargs-標準入力からコマンドラインをビルドおよび実行します(スペースなどのファイルを処理する場合は-0)

次のような操作を行って、2秒間隔で変更された最新の10個のファイル/ディレクトリを表示できます(監視のデフォルト)

「ls -lart | tail -10」を見る

オプション-lartは、lsを冗長にし、変更時間に基づいてソートするように指示します。

本当にファイルだけが必要な場合は、次のようにします。

「ls -lart | awk '{print \ $ 8}' | tail -10 | xargs」を見る

または単にそれらを表示する:

ls -lart | awk '{print $ 8}' | テール-10 | xargs


0

これを実現するために、シェルでバックティックを使用できます。

echo -E `ls -1`

すべてのファイル名で機能するわけではありません。試してみてください:touch ./-en
kasperd

それは、[a-d]そのソートで始まるファイルがその前にない場合にのみ重要です。スクリプトで実行している場合は、echo -Eそれほど不便ではなく、末尾の改行は問題になりません。

0

結果を1行で印刷するだけでなく、分離方法を指定する必要があり、ORSで指定できるため、これは私にとってはうまくいきました。

ls -1 | awk '{ ORS="|"; print; }'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.