![여러 디렉터리를 추가하는 방법](https://linux55.com/image/214713/%EC%97%AC%EB%9F%AC%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%A5%BC%20%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
아래 스크립트는 디렉토리에 4개 이상의 파일이 포함된 경우 단일 디렉토리의 소유자를 확인하고 변경하는 데 사용됩니다. 모든 디렉토리를 확인하고 모든 디렉토리에 4개 이상의 파일이 포함되어 소유자를 변경할 수 있도록 여러 디렉토리를 추가하는 방법은 무엇입니까?
#!/bin/bash
FILE=""
DIR="/home/ec2-user/test1"
dir_files=("$DIR"/*)
if [[ "${#dir_files[@]}" -gt 4 ]] ; then
#More than 4 files change owner satha
chown satha $DIR
elif [[ -e "${dir_files[0]}" ]] ; then
#change owner if DIR is below 4 files
chown lohith $DIR
else
#change owner if DIR is empty
chown lohith $DIR
fi
답변1
#!/bin/zsh -
dirs=( $^argv(N-/) ) # those of the arguments that can be determined to
# be directories after symlink resolution
for dir ($dirs) {
files=( $dir/*(NDY5) ) # files in $dir, stopping at the 5th
case $#files {
(5) chown -- satha $dir;; # for > 4 files
(0) chown -- lohith $dir;; # for no file
(*) chown -- lohith $dir;; # anything else (1 to 4)
}
}
답변2
변수에 저장하려는 디렉터리를 반복하기 위해 for 루프를 만들 수 있습니다.
내 구조는 다음과 같습니다.
:~/test1$ find . | sort
.
./dir1
./dir1/dir1-a
./dir1/dir1-a/file1a-a
./dir1/dir1-a/file1a-b
./dir1/dir1-a/file1a-c
./dir1/dir1-a/file1a-d
./dir1/dir1-b
./dir1/dir1-b/file1b-a
./dir1/dir1-b/file1b-b
./dir1/dir1-b/file1b-c
./dir1/dir1-c
./dir1/dir1-c/file1c-a
./dir1/dir1-c/file1c-b
./dir1/dir1-d
./dir1/dir1-d/file1d-a
./dir1/file1-a
./dir1/file1-b
./dir2
./dir2/dir2-a
./dir2/dir2-b
./dir2/dir2-c
./test.sh
dir1에는 파일과 폴더가 포함되어 있습니다. 하위 폴더로 무엇을 하려는지 또는 하위 폴더가 존재하는지 명시하지 않았습니다.
#!/bin/bash
DIR=( "/home/aubs/test1/dir1" "/home/aubs/test1/dir2" )
for Item in "${DIR[@]"}
do
echo "Scanning $Item"
COUNT_FILES=$(find "$Item" -maxdepth 1 -type f | wc -l)
echo "contains $COUNT_FILES files"
done
DIR의 항목을 과 사이에 배치해야 하는 경우 do
각 done
반복의 디렉터리 이름은 입니다 $Item
.
$ ./test.sh
Scanning /home/aubs/test1/dir1
contains 2 files
Scanning /home/aubs/test1/dir2
contains 0 files
내 테스트에서 사용하면 ${#dir_files[@]}
6과 3이 제공되었으며 이는 분명히 디렉토리도 고려한 것입니다. 내 예에서는 find "$Item" -maxdepth 1 -type f
이를 사용하여 하위 디렉터리를 보지 않고 디렉터리에 있는 파일 수만 계산합니다. 그런 다음 파이프를 통해 wc -l
행 수를 계산합니다.
또한 해당 폴더에 있는 파일의 소유권을 가져오고 싶은지 여부도 고려하지 않았습니다.