私ができる方法はありますか?たとえば、aが次のような長い名前を取得する場合:
i-have-names-that-are-too-long-to-describe/
i-have-names-that-are-too-long-to-describe-2/
i-have-names-that-are-too-long-to-descri-3/
ls
ls -l
マイファイルまたはディレクトリ名が20文字を超える場合からアップグレードできますか?
.bashrc
これを行うために私のbash機能を設定する方法はありますか?生成された関数lls()を呼び出します。
@tripleeeが質問しました。
ls -l
入力ファイル名が長すぎるときに使用しますか?なぜ?出力を短くするのではなく、長くします。長いファイル名と短いファイル名が混在している場合はどうすればよいですか?
長いファイル名を読むことがリストに整理されていることをお勧めします(固定列をより簡単に消化して読み取ることができます)。長いファイル名と短いファイル名が混在している場合は、デフォルトでリスト形式を使用します。
答え1
あなたの要件を満たす組み込みオプションはありませんls
。出力を解析した後に「長い」ファイル名が見つかった場合は、再起動するか、次の操作を行う必要があります。
$ ls ??????????* >& /dev/null && ls -l || ls
(?
長さ制限を好きなだけ入力してください。エイリアスとして設定できます。)
ただ使ってみるのはどうですかls -1
? (小文字のLではなくaです。)常に1列にファイルを一覧表示します。 (または単一列ディスプレイに接続することも、またはパイプls
で接続します。)またはで使用します。more
less
find
-maxdepth 1
答え2
if [ $(ls "$@" | ( max=0; while read l ; do len=${#l} ; [[ $max -lt $len ]] && max=$len; done; echo $max )) -gt 20 ]
then
ls "$@"
else
ls -l "$@"
fi
あるいは、manatworkの提案のおかげで、この簡単なアプローチではGNU wcを使用できると仮定します。
[[ $(ls "$@" | wc -L) -gt 20 ]] && ls "$@" || ls -l "$@"
答え3
私が望むものに対する私の独立した試みは次のとおりです。
lls(){
opt=" "
for i in $(ls -l | tr -s " " | cut -d' ' -f9)
do
count=$(echo $i | wc -m)
if [ $count -gt 20 ] ; then
opt=" -l"; break;
fi
done
ls $opt
}
私は.bashrcに入れました。ただし、これにはtr、cut、wcを使用する必要があります。