Bash - 지정된 폴더를 반복하여 빈 파일 찾기

Bash - 지정된 폴더를 반복하여 빈 파일 찾기

loop스크립트에 지정된 폴더 집합을 반복하여 모든 빈 파일을 인쇄하고 싶습니다 . 나는 다음 스크립트를 사용합니다.

array=("folderA" "folderX")    

for file in ./"${array[@]}"/*; do

  if [ -s "${file}" ]; then

    echo "$file"

  fi
done

이것은 작동하지 않습니다. 다음과 같이 배열에 지정된 첫 번째 폴더에 대한 출력만 얻습니다.

./folderX
./folderA/emty_file1
./folderA/emty_file7
./folderA/emty_file12
./folderA/emty_file24

스크립트가 배열에 지정된 다른 디렉터리의 빈 파일도 감지하도록 하려면 어떻게 해야 합니까?

답변1

반복할 필요가 없습니다.

array=("folderA" "folderX")
find "${array[@]}" -maxdepth 1 -type f -empty

답변2

또 다른 간단한 해결책:

for i in "folderA" "folderX"
  do find "$i" -type f -empty
done

스크립트가 다른 위치에서 실행되는 경우 "/usr/local"과 같이 폴더 이름과 함께 경로를 포함해야 합니다.

편집: 또한 올바르게 지적했듯이 검색 범위를 제한하려면 그에 따라 최대 깊이를 사용하십시오.

for i in "folderA" "folderX"
  do find "$i" -maxdepth 1 -type f -empty
done

답변3

./"${array[@]}"/*확장:

./folderA folderB/*

./첫 번째 요소의 시작 부분과 /*두 번째 요소의 끝 부분 으로 이동하기 때문입니다 .

해야 할 일은 배열의 각 요소에 /* 접미사를 추가하는 것입니다.

"${array[@]/%//*}"

${var/%Pattern/Replacement}를 검색할 수 있습니다.여기자세히 알아보고 시작 부분에 "./"를 추가하는 방법을 알아보세요(특정한 경우에는 위의 대체 방법으로 충분하지만).

답변4

아마도 이것이 원하는 결과를 얻는 데 도움이 될 것입니다.

#!/bin/bash

arr=("folderA" "folderX")    # Storing folder names to an array 
arr_count=${#arr[@]}     # Stroing count of element's in an array 
echo "Count of array :  $arr_count" # Printing the count of elements present in an array 

for ((  i=0 ; i<2 ; i++ ))
{
   find "$(pwd)"/"${arr[$i]}" -empty -type f 
}

빈 파일을 삭제하려면 -delete위의 find 명령에 추가하세요.

find "$(pwd)"/"${arr[$i]}" -empty -type f -delete

관련 정보