Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
centos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
CI / CD Analytics
Repository Analytics
Value Stream Analytics
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
platyhouse
centos
Commits
27d5c851
Commit
27d5c851
authored
Oct 15, 2025
by
platyhouse
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added pty_files_find.sh
parent
e5428cac
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
325 additions
and
167 deletions
+325
-167
pty_files_find.sh
pty_files_find.sh
+325
-0
pty_files_find_old.sh
pty_files_find_old.sh
+0
-167
No files found.
pty_files_find.sh
0 → 100755
View file @
27d5c851
#!/bin/bash
# pty_files_find.sh
# 다양한 조건으로 파일을 검색하는 스크립트
# 사용법:
# ./pty_files_find.sh "*.log" -d 10 # 현재 디렉토리에서 .log 파일 중 10일 이상 지난 파일 검색
# ./pty_files_find.sh "*.txt" -r -h 24 # 하위 디렉토리까지 .txt 파일 중 24시간 이상 지난 파일 검색
# ./pty_files_find.sh "./*" -zerofiles # 현재 디렉토리에서 0바이트 파일 검색
# ./pty_files_find.sh "*.log" -r -zerofiles # 하위 디렉토리까지 .log 파일 중 0바이트 파일 검색
show_usage
()
{
echo
"사용법:
$0
<검색패턴> [옵션]"
echo
""
echo
"필수 인자:"
echo
" 검색패턴 검색할 파일 패턴 (예: *.log, *.txt, ./* 등)"
echo
" ./* : 현재 디렉토리의 모든 파일"
echo
" *.log : 현재 디렉토리의 .log 파일"
echo
" /var/log/*.log : /var/log의 .log 파일"
echo
""
echo
"검색 조건 옵션:"
echo
" -d 일수 지정한 일수보다 오래된 파일 검색"
echo
" -h 시간 지정한 시간보다 오래된 파일 검색"
echo
" -zerofiles 0바이트 파일 검색"
echo
" -emptydir 빈 디렉토리 검색"
echo
" -size 크기 특정 크기의 파일 검색 (예: +10M, -1k, 100c)"
echo
" (+: 초과, -: 미만, 단위: c=byte, k=KB, M=MB, G=GB)"
echo
" -user 사용자 특정 사용자 소유 파일 검색"
echo
" -perm 권한 특정 권한의 파일 검색 (예: 777, 644)"
echo
""
echo
"공통 옵션:"
echo
" -r 하위 디렉토리까지 재귀적으로 검색"
echo
" -t 타입 파일 타입 (f: 파일만, d: 디렉토리만, l: 심볼릭링크)"
echo
" -s 파일 크기와 함께 표시"
echo
" -l 상세 정보 표시 (ls -lh 형식)"
echo
" -maxdepth N 검색 깊이 제한 (1: 현재 디렉토리만)"
echo
" -count 개수만 표시"
echo
""
echo
"예제:"
echo
"
$0
'*.log' -d 10 # 현재 디렉토리의 .log 파일 중 10일 이상 지난 파일"
echo
"
$0
'*.log' -r -d 10 # 하위 디렉토리까지 .log 파일 중 10일 이상 지난 파일"
echo
"
$0
'*.txt' -h 24 # 현재 디렉토리의 .txt 파일 중 24시간 이상 지난 파일"
echo
"
$0
'./*' -zerofiles # 현재 디렉토리의 모든 0바이트 파일"
echo
"
$0
'*.log' -r -zerofiles # 하위 디렉토리까지 .log 파일 중 0바이트 파일"
echo
"
$0
'./*' -r -emptydir # 하위 디렉토리까지 모든 빈 디렉토리"
echo
"
$0
'/var/log/*.log' -size +100M # /var/log의 .log 파일 중 100MB 이상"
echo
"
$0
'*.tmp' -r -size -1k # 하위 디렉토리까지 .tmp 파일 중 1KB 미만"
echo
"
$0
'./*' -user root # 현재 디렉토리의 root 소유 파일"
echo
"
$0
'*.sh' -perm 777 # 현재 디렉토리의 .sh 파일 중 777 권한"
echo
"
$0
'*.log' -r -d 30 -s # 하위까지 .log 파일 중 30일 이상, 크기 표시"
echo
"
$0
'./*' -maxdepth 2 -zerofiles # 최대 2단계 깊이까지 0바이트 파일"
exit
1
}
# 첫 번째 인자 확인 (검색 패턴)
if
[
$#
-eq
0
]
;
then
echo
"오류: 검색 패턴을 지정해야 합니다."
echo
""
show_usage
fi
# 첫 번째 인자가 옵션인지 확인
if
[[
"
$1
"
==
-
*
]]
;
then
echo
"오류: 첫 번째 인자는 검색 패턴이어야 합니다."
echo
""
show_usage
fi
# 첫 번째 인자를 검색 패턴으로 설정
SEARCH_PATTERN
=
"
$1
"
shift
# 패턴에서 경로와 파일명 분리
if
[[
"
$SEARCH_PATTERN
"
==
*
/
*
]]
;
then
# 경로가 포함된 경우
SEARCH_PATH
=
"
${
SEARCH_PATTERN
%/*
}
"
FILE_PATTERN
=
"
${
SEARCH_PATTERN
##*/
}
"
# 경로가 비어있으면 루트로 설정
if
[
-z
"
$SEARCH_PATH
"
]
;
then
SEARCH_PATH
=
"/"
fi
else
# 경로가 없는 경우 현재 디렉토리
SEARCH_PATH
=
"."
FILE_PATTERN
=
"
$SEARCH_PATTERN
"
fi
# 기본값 설정
DAYS
=
""
HOURS
=
""
FILE_TYPE
=
""
SHOW_SIZE
=
false
SHOW_DETAIL
=
false
SHOW_COUNT
=
false
SEARCH_MODE
=
""
FILE_SIZE
=
""
FILE_USER
=
""
FILE_PERM
=
""
MAX_DEPTH
=
"1"
RECURSIVE
=
false
# 옵션 파싱
while
[[
$#
-gt
0
]]
;
do
case
$1
in
-d
)
DAYS
=
"
$2
"
SEARCH_MODE
=
"old"
shift
2
;;
-h
)
HOURS
=
"
$2
"
SEARCH_MODE
=
"old"
shift
2
;;
-zerofiles
)
SEARCH_MODE
=
"zero"
shift
;;
-emptydir
)
SEARCH_MODE
=
"emptydir"
FILE_TYPE
=
"d"
shift
;;
-size
)
FILE_SIZE
=
"
$2
"
SEARCH_MODE
=
"size"
shift
2
;;
-user
)
FILE_USER
=
"
$2
"
SEARCH_MODE
=
"user"
shift
2
;;
-perm
)
FILE_PERM
=
"
$2
"
SEARCH_MODE
=
"perm"
shift
2
;;
-r
)
RECURSIVE
=
true
MAX_DEPTH
=
""
shift
;;
-t
)
FILE_TYPE
=
"
$2
"
shift
2
;;
-s
)
SHOW_SIZE
=
true
shift
;;
-l
)
SHOW_DETAIL
=
true
shift
;;
-maxdepth
)
MAX_DEPTH
=
"
$2
"
RECURSIVE
=
false
shift
2
;;
-count
)
SHOW_COUNT
=
true
shift
;;
-help
|
--help
)
show_usage
;;
*
)
echo
"오류: 알 수 없는 옵션:
$1
"
echo
""
show_usage
;;
esac
done
# 검색 모드가 지정되지 않은 경우
if
[
-z
"
$SEARCH_MODE
"
]
;
then
echo
"오류: 검색 조건을 지정해야 합니다."
echo
""
show_usage
fi
# 검색 경로 확인
if
[
!
-d
"
$SEARCH_PATH
"
]
;
then
echo
"오류: 검색 경로 '
$SEARCH_PATH
'가 존재하지 않습니다."
exit
1
fi
# 숫자 유효성 검사
if
[
-n
"
$DAYS
"
]
;
then
if
!
[[
"
$DAYS
"
=
~ ^[0-9]+
$
]]
;
then
echo
"오류: 일수는 숫자여야 합니다."
exit
1
fi
fi
if
[
-n
"
$HOURS
"
]
;
then
if
!
[[
"
$HOURS
"
=
~ ^[0-9]+
$
]]
;
then
echo
"오류: 시간은 숫자여야 합니다."
exit
1
fi
fi
# find 명령어 옵션 구성
FIND_CMD
=
"find
\"
$SEARCH_PATH
\"
"
# 최대 깊이 설정 (-r 옵션이 없고 -maxdepth도 지정되지 않은 경우 기본값 1)
if
[
-n
"
$MAX_DEPTH
"
]
;
then
FIND_CMD
=
"
$FIND_CMD
-maxdepth
$MAX_DEPTH
"
fi
# 파일 패턴 적용
if
[
"
$FILE_PATTERN
"
!=
"*"
]
;
then
FIND_CMD
=
"
$FIND_CMD
-name
\"
$FILE_PATTERN
\"
"
fi
# 파일 타입 옵션
if
[
"
$FILE_TYPE
"
=
"f"
]
;
then
FIND_CMD
=
"
$FIND_CMD
-type f"
elif
[
"
$FILE_TYPE
"
=
"d"
]
;
then
FIND_CMD
=
"
$FIND_CMD
-type d"
elif
[
"
$FILE_TYPE
"
=
"l"
]
;
then
FIND_CMD
=
"
$FIND_CMD
-type l"
fi
# 검색 조건 설정
SEARCH_DESC
=
""
case
$SEARCH_MODE
in
old
)
if
[
-n
"
$DAYS
"
]
&&
[
-n
"
$HOURS
"
]
;
then
echo
"오류: -d와 -h 옵션은 동시에 사용할 수 없습니다."
exit
1
fi
if
[
-n
"
$DAYS
"
]
;
then
FIND_CMD
=
"
$FIND_CMD
-mtime +
$DAYS
"
SEARCH_DESC
=
"
${
DAYS
}
일 이상 지난 파일"
else
MINUTES
=
$((
HOURS
*
60
))
FIND_CMD
=
"
$FIND_CMD
-mmin +
$MINUTES
"
SEARCH_DESC
=
"
${
HOURS
}
시간 이상 지난 파일"
fi
;;
zero
)
FIND_CMD
=
"
$FIND_CMD
-type f -size 0"
SEARCH_DESC
=
"0바이트 파일"
;;
emptydir
)
FIND_CMD
=
"
$FIND_CMD
-type d -empty"
SEARCH_DESC
=
"빈 디렉토리"
;;
size
)
FIND_CMD
=
"
$FIND_CMD
-size
$FILE_SIZE
"
SEARCH_DESC
=
"크기:
$FILE_SIZE
"
;;
user
)
FIND_CMD
=
"
$FIND_CMD
-user
$FILE_USER
"
SEARCH_DESC
=
"소유자:
$FILE_USER
"
;;
perm
)
FIND_CMD
=
"
$FIND_CMD
-perm
$FILE_PERM
"
SEARCH_DESC
=
"권한:
$FILE_PERM
"
;;
esac
# 헤더 출력
echo
"============================================"
echo
"파일 검색 결과"
echo
"============================================"
echo
"검색 패턴:
$SEARCH_PATTERN
"
echo
"검색 경로:
$SEARCH_PATH
"
echo
"검색 조건:
$SEARCH_DESC
"
if
[
"
$RECURSIVE
"
=
true
]
;
then
echo
"재귀 검색: 예 (모든 하위 디렉토리)"
elif
[
-n
"
$MAX_DEPTH
"
]
;
then
echo
"검색 깊이:
$MAX_DEPTH
"
fi
if
[
-n
"
$FILE_TYPE
"
]
;
then
case
$FILE_TYPE
in
f
)
echo
"파일 타입: 파일만"
;;
d
)
echo
"파일 타입: 디렉토리만"
;;
l
)
echo
"파일 타입: 심볼릭링크만"
;;
esac
fi
echo
"============================================"
echo
""
# 개수만 표시하는 경우
if
[
"
$SHOW_COUNT
"
=
true
]
;
then
COUNT
=
$(
eval
$FIND_CMD
2>/dev/null |
wc
-l
)
echo
"총
${
COUNT
}
개의 항목을 찾았습니다."
exit
0
fi
# 파일 찾기 및 결과 출력
if
[
"
$SHOW_DETAIL
"
=
true
]
;
then
# 상세 정보 표시
eval
$FIND_CMD
-exec
ls
-lhd
{}
\;
2>/dev/null |
sort
-k9
COUNT
=
$(
eval
$FIND_CMD
2>/dev/null |
wc
-l
)
elif
[
"
$SHOW_SIZE
"
=
true
]
;
then
# 크기와 함께 표시
eval
$FIND_CMD
-exec
ls
-lhd
{}
\;
2>/dev/null |
awk
'{print $5 "\t" $9}'
|
sort
-k2
COUNT
=
$(
eval
$FIND_CMD
2>/dev/null |
wc
-l
)
else
# 기본: 경로만 표시
eval
$FIND_CMD
2>/dev/null |
sort
COUNT
=
$(
eval
$FIND_CMD
2>/dev/null |
wc
-l
)
fi
# 결과 요약
echo
""
echo
"============================================"
echo
"총
${
COUNT
}
개의 항목을 찾았습니다."
echo
"============================================"
# 총 크기 계산 (파일인 경우만)
if
[
"
$SEARCH_MODE
"
!=
"emptydir"
]
&&
([
"
$FILE_TYPE
"
=
"f"
]
||
[
-z
"
$FILE_TYPE
"
]
||
[
"
$SEARCH_MODE
"
=
"zero"
]
||
[
"
$SEARCH_MODE
"
=
"size"
])
;
then
TOTAL_SIZE
=
$(
eval
$FIND_CMD
-type
f
-exec
du
-cb
{}
+ 2>/dev/null |
tail
-1
|
cut
-f1
)
if
[
-n
"
$TOTAL_SIZE
"
]
&&
[
"
$TOTAL_SIZE
"
!=
"0"
]
;
then
# 바이트를 사람이 읽기 쉬운 형식으로 변환
TOTAL_SIZE_HUMAN
=
$(
numfmt
--to
=
iec-i
--suffix
=
B
$TOTAL_SIZE
2>/dev/null
||
echo
"
${
TOTAL_SIZE
}
bytes"
)
echo
"총 파일 크기:
$TOTAL_SIZE_HUMAN
"
echo
"============================================"
fi
fi
exit
0
pty_files_find_old.sh
deleted
100755 → 0
View file @
e5428cac
#!/bin/bash
# pty_files_old_files.sh
# 오래된 파일을 찾아서 목록을 보여주는 스크립트
# 사용법:
# ./pty_files_old_files.sh -d 10 # 10일 이상 지난 파일 검색
# ./pty_files_old_files.sh -h 24 # 24시간 이상 지난 파일 검색
show_usage
()
{
echo
"사용법:
$0
[-d 일수] [-h 시간] [검색경로]"
echo
""
echo
"옵션:"
echo
" -d 일수 지정한 일수보다 오래된 파일 검색"
echo
" -h 시간 지정한 시간보다 오래된 파일 검색"
echo
" -p 경로 검색할 경로 (기본값: 현재 디렉토리)"
echo
" -t 타입 파일 타입 (f: 파일만, d: 디렉토리만, 기본값: 모두)"
echo
" -s 파일 크기와 함께 표시"
echo
" -l 상세 정보 표시 (ls -lh 형식)"
echo
""
echo
"예제:"
echo
"
$0
-d 10 # 현재 디렉토리에서 10일 이상 지난 파일 검색"
echo
"
$0
-h 24 # 현재 디렉토리에서 24시간 이상 지난 파일 검색"
echo
"
$0
-d 7 -p /var/log # /var/log에서 7일 이상 지난 파일 검색"
echo
"
$0
-d 30 -t f -s # 30일 이상 지난 파일만 크기와 함께 검색"
exit
1
}
# 기본값 설정
DAYS
=
""
HOURS
=
""
SEARCH_PATH
=
"."
FILE_TYPE
=
""
SHOW_SIZE
=
false
SHOW_DETAIL
=
false
# 옵션 파싱
while
getopts
"d:h:p:t:sl"
opt
;
do
case
$opt
in
d
)
DAYS
=
"
$OPTARG
"
;;
h
)
HOURS
=
"
$OPTARG
"
;;
p
)
SEARCH_PATH
=
"
$OPTARG
"
;;
t
)
FILE_TYPE
=
"
$OPTARG
"
;;
s
)
SHOW_SIZE
=
true
;;
l
)
SHOW_DETAIL
=
true
;;
*
)
show_usage
;;
esac
done
# -d 또는 -h 옵션이 반드시 필요
if
[
-z
"
$DAYS
"
]
&&
[
-z
"
$HOURS
"
]
;
then
echo
"오류: -d (일수) 또는 -h (시간) 옵션이 필요합니다."
echo
""
show_usage
fi
# 둘 다 지정된 경우 에러
if
[
-n
"
$DAYS
"
]
&&
[
-n
"
$HOURS
"
]
;
then
echo
"오류: -d와 -h 옵션은 동시에 사용할 수 없습니다."
echo
""
show_usage
fi
# 숫자 유효성 검사
if
[
-n
"
$DAYS
"
]
;
then
if
!
[[
"
$DAYS
"
=
~ ^[0-9]+
$
]]
;
then
echo
"오류: 일수는 숫자여야 합니다."
exit
1
fi
fi
if
[
-n
"
$HOURS
"
]
;
then
if
!
[[
"
$HOURS
"
=
~ ^[0-9]+
$
]]
;
then
echo
"오류: 시간은 숫자여야 합니다."
exit
1
fi
fi
# 검색 경로 확인
if
[
!
-d
"
$SEARCH_PATH
"
]
;
then
echo
"오류: 검색 경로 '
$SEARCH_PATH
'가 존재하지 않습니다."
exit
1
fi
# find 명령어 옵션 구성
FIND_CMD
=
"find
\"
$SEARCH_PATH
\"
"
# 파일 타입 옵션
if
[
"
$FILE_TYPE
"
=
"f"
]
;
then
FIND_CMD
=
"
$FIND_CMD
-type f"
elif
[
"
$FILE_TYPE
"
=
"d"
]
;
then
FIND_CMD
=
"
$FIND_CMD
-type d"
fi
# 시간 옵션
if
[
-n
"
$DAYS
"
]
;
then
FIND_CMD
=
"
$FIND_CMD
-mtime +
$DAYS
"
TIME_DESC
=
"
${
DAYS
}
일"
else
# 시간을 분으로 변환 (24시간 = 1440분)
MINUTES
=
$((
HOURS
*
60
))
FIND_CMD
=
"
$FIND_CMD
-mmin +
$MINUTES
"
TIME_DESC
=
"
${
HOURS
}
시간"
fi
# 헤더 출력
echo
"============================================"
echo
"오래된 파일 검색 결과"
echo
"============================================"
echo
"검색 경로:
$SEARCH_PATH
"
echo
"검색 기준:
${
TIME_DESC
}
이상 지난 파일"
if
[
-n
"
$FILE_TYPE
"
]
;
then
if
[
"
$FILE_TYPE
"
=
"f"
]
;
then
echo
"파일 타입: 파일만"
else
echo
"파일 타입: 디렉토리만"
fi
fi
echo
"============================================"
echo
""
# 파일 찾기 및 결과 출력
if
[
"
$SHOW_DETAIL
"
=
true
]
;
then
# 상세 정보 표시
eval
$FIND_CMD
-exec
ls
-lhd
{}
\;
2>/dev/null |
sort
-k9
COUNT
=
$(
eval
$FIND_CMD
2>/dev/null |
wc
-l
)
elif
[
"
$SHOW_SIZE
"
=
true
]
;
then
# 크기와 함께 표시
eval
$FIND_CMD
-exec
ls
-lhd
{}
\;
2>/dev/null |
awk
'{print $5 "\t" $9}'
|
sort
-k2
COUNT
=
$(
eval
$FIND_CMD
2>/dev/null |
wc
-l
)
else
# 기본: 경로만 표시
eval
$FIND_CMD
2>/dev/null |
sort
COUNT
=
$(
eval
$FIND_CMD
2>/dev/null |
wc
-l
)
fi
# 결과 요약
echo
""
echo
"============================================"
echo
"총
${
COUNT
}
개의 항목을 찾았습니다."
echo
"============================================"
# 총 크기 계산 (파일인 경우만)
if
[
"
$FILE_TYPE
"
=
"f"
]
||
[
-z
"
$FILE_TYPE
"
]
;
then
TOTAL_SIZE
=
$(
eval
$FIND_CMD
-type
f
-exec
du
-cb
{}
+ 2>/dev/null |
tail
-1
|
cut
-f1
)
if
[
-n
"
$TOTAL_SIZE
"
]
;
then
# 바이트를 사람이 읽기 쉬운 형식으로 변환
TOTAL_SIZE_HUMAN
=
$(
numfmt
--to
=
iec-i
--suffix
=
B
$TOTAL_SIZE
2>/dev/null
||
echo
"
${
TOTAL_SIZE
}
bytes"
)
echo
"총 파일 크기:
$TOTAL_SIZE_HUMAN
"
echo
"============================================"
fi
fi
exit
0
platyhouse
@platyhouse
mentioned in commit
8587004b
·
Dec 16, 2025
mentioned in commit
8587004b
mentioned in commit 8587004bfbebb2ceff13804bc1eea04727f6a285
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment