파일이나 디렉터리의 줄이 너무 길어지면 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/

20자보다 긴 파일이나 디렉터리 이름이 있는 경우 ls에서 로 "업그레이드"할 수 있습니까 ?ls -l

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

@tripleee가 질문했습니다.

ls -l입력 파일 이름이 긴 경우를 원하시나요 ? 왜? 출력을 더 짧게 만드는 것이 아니라 더 길게 만듭니다. 긴 파일 이름과 짧은 파일 이름이 혼합되어 있는 경우 어떻게 해야 합니까?

나는 긴 파일 이름을 읽는 것이 목록으로 체계화되기를 더 원합니다. (고정된 열로 내려가서 소화하고 읽기가 더 쉽습니다); 긴 파일 이름과 짧은 파일 이름이 혼합된 경우 기본적으로 목록 형식을 사용합니다.

답변1

ls원하는 것을 수행하는 내장 옵션이 없습니다 . "긴" 파일 이름이 발견되면 출력을 구문 분석한 다음 다시 시작하거나 다음과 같이 수행해야 합니다.

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

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

단순히 사용하지 않는 이유는 무엇입니까 ls -1? (소문자 L이 아닌 1입니다.) 항상 단일 열에 파일을 나열합니다. (또는 단일 열 표시로 이동하는 또는 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를 사용해야 합니다.

관련 정보