ls コマンドライン改行防止

ls コマンドライン改行防止

私はコマンドに関連していないこの質問に対する答えを探していますless

ls端末でコマンドを実行し、長いファイル名が改行されるのを防ぐ方法はありますか?

たとえば、次の代わりにlsを実行した場合:

shortfile
thisisalongfi
lename
shortfile

ラップする必要があるか、まったくラップしないはずの長いファイル名を切り取り、次のように読みたいと思います。

shortfile
thisisalongfi
shortfile

答え1

setterm --linewrap off
ls
setterm --linewrap on

settermターミナル(ターミナルエミュレータ)の設定に取り組んでいきますが、通常ターミナルはこの機能をサポートする場合とサポートしない場合があります。

答え2

このlsコマンドにはファイル名を切り捨てるオプションがないため、追加のツールが必要です。

あなたはそれを使用することができますcut行を切ります。端末では、環境変数には端末サイズがLINES含まれます。COLUMNS

ls | cut -c 1-$COLUMNS

lsこれにより、しばしばエイリアシングされるシェーディングが抑制されます。シェーディングをテキストツールベースの切り捨てと組み合わせる簡単な方法はありません。端末自体にカットするように指示する

答え3

ラップされたファイル名とラップされていないファイル名を区別するのは難しいので、標準fold(1)コマンドはここで少し悪いです。

$ printf 'short\nlongeshort\nshort\n' | fold -w 5
short
longe
short
short

GNUはsed動作しますが、バックスラッシュのためにいくつかの問題があります。

$ printf 'short\nlongeshort\nshort\n' | gsed 's/\(.\{5\}\).*/\1/'
short
longe
short

awk線が切り取られる位置を表示できます。

$ printf 'short\nlongeshort\nshort\n' |
awk -v w=5 '{if(length > w){print substr($0,0,w-3) "..."}else{print}}'
short
lo...
short

幅パラメータを許可するスクリプトでは、非表示になっているか、デフォルトで使用する必要がありますw$COLUMNS

同時に、

$ setterm --linewrap off
ksh: setterm: not found
$ pkglocate setterm
$ 

携帯性にあまり役に立ちません。

関連情報