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