これを実行する方法はありますか? たとえば、次のような長い名前が付けられたとします。
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 文字を超えるファイル名またはディレクトリ名がある場合、から に「アップグレード」できますか?
これを実行するために bash 関数を設定する方法はありますか.bashrc
? 結果の関数を lls() と呼びます。
@tripleee さんが質問しました:
入力ファイル名が長い場合は、必要です
ls -l
か? なぜですか? 出力は短くなるのではなく長くなります。長いファイル名と短いファイル名が混在している場合はどうなりますか?
長いファイル名の読み取りがリストに体系化される (固定列で読みやすくなる) ようにしたいのですが、長いファイル名と短いファイル名が混在する場合は、デフォルトでリスト形式にします。
答え1
ls
必要な機能を実行する組み込みオプションはありません。出力を解析して「長い」ファイル名が見つかった場合は再起動するか、次のような操作を行う必要があります。
$ ls ??????????* >& /dev/null && ls -l || ls
(?
長さ制限まで入力してください。エイリアスとして設定できます。)
単に を使用しないでくださいls -1
(これは 1 であり、小文字の L ではありません)。 常に 1 列にファイルがリストされます。 (またはまたはls
にパイプすると、これも 1 列表示になります)。または をと共に使用します。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 を使用する必要があります。