파일이나 디렉터리 줄이 너무 길면 ls 목록 형식으로 업그레이드하시겠습니까?

파일이나 디렉터리 줄이 너무 길면 ls 목록 형식으로 업그레이드하시겠습니까?

내가 할 수 있는 방법이 있나요? 예를 들어, 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/

lsls -l내 파일 또는 디렉터리 이름이 20자를 초과하는 경우 에서 업그레이드할 수 있습니까?

.bashrc이 작업을 수행하기 위해 내 bash 기능을 설정하는 방법이 있습니까 ? 생성된 함수 lls()를 호출하겠습니다.

@tripleee가 질문했습니다.

ls -l입력 파일 이름이 너무 길 때 사용하시겠습니까? 왜? 출력을 더 짧게 만드는 것이 아니라 더 길게 만듭니다. 긴 파일 이름과 짧은 파일 이름이 혼합되어 있는 경우 어떻게 해야 합니까?

긴 파일 이름을 읽는 것이 목록으로 체계화되도록 하는 것이 좋습니다(고정 열을 더 쉽게 소화하고 읽을 수 있도록 함). 긴 파일 이름과 짧은 파일 이름이 혼합된 경우에는 기본적으로 목록 형식을 사용하겠습니다.

답변1

귀하의 요구 사항을 충족하는 기본 제공 옵션이 없습니다 ls. 출력을 구문 분석한 후 "긴" 파일 이름이 발견되면 다시 시작하거나 다음을 수행해야 합니다.

$ ls ??????????* >& /dev/null && ls -l || ls

( ?길이 제한을 원하는 만큼 입력하세요. 별칭으로 설정할 수 있습니다.)

그냥 사용해 보는 게 어때요 ls -1? (소문자 L이 아닌 a입니다.) 항상 한 열에 파일을 나열합니다. (또는 단일 열 디스플레이에 연결할 수도 있는 또는 에 파이프 ls로 연결됩니다.) 또는 와 함께 사용됩니다 .morelessfind-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를 사용해야 합니다.

관련 정보