파일 이름이 가장 긴 파일을 찾는 스크립트를 작성하는 데 도움을 주세요.

파일 이름이 가장 긴 파일을 찾는 스크립트를 작성하는 데 도움을 주세요.

해당 디렉터리에서 가장 많은 문자가 포함된 파일을 찾기 위해 전체 파일 디렉터리를 반복하는 스크립트를 만들려고 합니다. 첨부된 코드 샘플은 다음과 같습니다. 내가 뭘 잘못했나요?

  1 #!/bin/bash
  2 #This program takes an array of files and sees which is the largest in a directory
  3 
  4 files=() #create an Empty array for which files will be stored
  5 longest=${files[0]} #Sets point of origin for the current largest file at 0
  6 
  7 echo "Enter Directory name:"
  8 read dir_name
  9 
 10 if [ -d "$dir_name" ]; then #Test file to see if it's a directory
 11 
 12         for i in "$dir_name"/* #For loop to discern the file with the most characters
 13            do
 14                 files=$dir_name
 15                 if [ "${#i}" -gt "${#longest}" ]; then
 16                         longest="$i"
 17                         echo "$i && Character count:${#files[i]}"
 18                 fi
 19            done
 20 
 21 elif [ ! -d "$dir_name" ]
 22 then
 23         echo "Sorry not the directory we are looking for"
 24         exit 0
 25 fi
 26 
 27 

답변1

귀하의 코드에 몇 가지 오류가 있습니다.

  1. 루프에는 for시작이나 끝에 a가 없습니다.dodone
  2. if [ ... ] then한 줄로 쓰면 ;에 넣어야 합니다 then.
  3. 스크립팅 목적으로 파일을 배열에 저장할 필요가 없으며 디렉터리의 파일을 직접 반복할 수 있습니다.

업데이트: 원하는 작업을 수행하기 위해 스크립트를 다시 작성했습니다. 디렉터리에서 가장 긴 파일 이름을 가진 파일을 가져와서 문자 수를 사용하여 인쇄합니다.

#!/bin/bash

longest=0

if [ $# -lt 1 ]; then # if no argument given, read the directory from input
    echo -n "Enter directory name: "
    read dir_name
else
    dir_name=$1 # this allows execute the script with the directory as argument
fi

if [ -d "$dir_name" ]; then # process if what was given is a directory
    for file in "$dir_name"/* ; do
        if [ -f "$file" ]; then # do it only for files
            filename=$(basename $file) # get only the filename: NOT in all UNIX
            if [ ${#filename} -gt $longest ]; then
                longest=${#filename} # store new longest
                longest_file=$file # save the file
            fi
        fi
    done
    # we are done, print results
    echo -n "The file with longest filename is" $longest_file
    echo " with a filename" $longest "characters long"
fi

시험:

다음과 같은 일반 파일이 포함된 "test" 디렉터리가 제공됩니다.

a ab abc abcd

스크립트의 출력은 다음과 같습니다.

The file with longest filename is test/abcd with a filename 4 characters long

관련 정보