내가 할 수 있는 방법이 있나요? 예를 들어 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
로 파이프합니다.) 또는 와 함께 사용합니다 .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를 사용해야 합니다.