내 디렉토리에는 여러 개의 파일이 포함된 많은 하위 디렉토리가 포함되어 있습니다(확장자가 .ar인 파일만 관심 있음). 이제 각 하위 디렉터리를 반복하여 확인해야 합니다. 예를 들어 파일 수가 4이면 해당 파일로 작업을 수행하고 두 번째 하위 디렉터리로 돌아가서 파일을 확인한 다음 = 3이면 해당 파일로 다른 명령을 수행합니다. . if 문에 매우 복잡한 조건을 적용해야 한다는 점에 유의하세요.
이것과 비슷한 것
dir=$1
for sub_dir in $dir; do
if the number of files in $sub_dir = 4; then
do something or command line
if the number of files in $sub_dir = 3; then
do another command
if the number of files in $sub_dir < 3; then
escape them
fi
done
비슷한 프로세스를 위한 템플릿이 필요합니다.
답변1
하위 디렉터리가 최상위 디렉터리 바로 아래에 있다고 가정합니다.
#!/bin/sh
topdir="$1"
for dir in "$topdir"/*/; do
set -- "$dir"/*.ar
if [ "$#" -eq 1 ] && [ ! -f "$1" ]; then
# do things when no files were found
# "$1" will be the pattern "$dir"/*.ar with * unexpanded
elif [ "$#" -lt 3 ]; then
# do things when less than 3 files were found
# the filenames are in "$@"
elif [ "$#" -eq 3 ]; then
# do things when 3 files were found
elif [ "$#" -eq 4 ]; then
# do things when 4 files were found
else
# do things when more than 4 files were found
fi
done
또는 다음을 사용하십시오 case
.
#!/bin/sh
topdir="$1"
for dir in "$topdir"/*/; do
set -- "$dir"/*.ar
if [ "$#" -eq 1 ] && [ ! -f "$1" ]; then
# no files found
fi
case "$#" in
[12])
# less than 3 files found
;;
3)
# 3 files found
;;
4)
# 4 files found
;;
*)
# more than 4 files found
esac
done
파일 이름이 필요한 코드 분기는 "$@"
하위 디렉터리의 모든 파일 이름을 참조하는 데 사용되거나 개별 파일을 참조하는 데 사용 "$1"
됩니다 . 파일 이름은 시작 디렉터리를 포함한 경로 이름 "$2"
입니다 .$topdir
답변2
다음을 수행할 수 있습니다.
dir=$1
subdirectories = $(find $dir -type d) # find only subdirectories in dir
for subdir in $subdirectories
do
n_files=$(find $subdir -maxdepth 1 -type f | wc -l) # find ordinary files in subdir and get it quantity
if [ $n_files -eq 4 ]
then
do_something_4
fi
if [ $n_files -eq 3 ]
then
do_something_3
fi
if [ $n_files -lt 3 ]
then
do_something_else
fi
done