OS/Linux

[LINUX] ๐Ÿ“š find ๋ช…๋ น์–ด ์ •๋ณตํ•˜๊ธฐ [ํŒŒ์ผ ๊ฒ€์ƒ‰]

์ธํŒŒ_ 2022. 2. 15. 21:26

ํŒŒ์ผexec

ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ ๊ฒ€์ƒ‰

find๋Š” ๋ฆฌ๋ˆ…์Šค์—์„œ ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด๋‹ค.

$ find [๊ฒฝ๋กœ] [์˜ต์…˜] [ํ‘œํ˜„์‹]
$ find [PATH] [OPTION] [EXPRESSION]

find ๋ช…๋ น์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜๊ณผ ๋งŽ์€ ์ˆ˜์˜ ํ‘œํ˜„์‹(Expression)์ด ์กด์žฌํ•˜๋Š”๋ฐ, find ๋ช…๋ น์˜ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์ง€์ •๋œ ํ‘œํ˜„์‹์˜ ์กฐํ•ฉ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ‘œํ˜„์‹์€ ๋งค์šฐ ์ž์ฃผ ์‚ฌ์šฉ๋˜์–ด ์ตํ˜€๋‘˜ ํ•„์š”์„ฑ์ด ์žˆ๋‹ค.


find ์˜ต์…˜

-H	์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋”ฐ๋ผ๊ฐ€์ง€ ์•Š๊ณ , Command Line Argument๋ฅผ ์ฒ˜๋ฆฌํ• ๋•Œ ์˜ˆ์™ธ.
-L	์‹ฌ๋ณผ๋ฆญ ๋งํฌ์— ์—ฐ๊ฒฐ๋œ ํŒŒ์ผ์ •๋ณด ์‚ฌ์šฉ.
-P	์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋”ฐ๋ผ๊ฐ€์ง€ ์•Š๊ณ , ๋งํฌ ์ž์ฒด ์ •๋ณด๋ฅผ ์‚ฌ์šฉ
-Olevel	์ฟผ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•œ๋‹ค. level : 0-3
-D [์˜ต์…˜]	๋””๋ฒ„๊น… ๊ธฐ๋Šฅ ์‚ฌ์šฉ. 
    help	๋””๋ฒ„๊น… ์˜ต์…˜์„ ์„ค๋ช….
    exec	-exec, -execdir, -ok, -okdir ๊ด€๋ จ ์ง„๋‹จ ์ •๋ณด๋ฅผ ํ‘œ์‹œ.
    opt	    ์ตœ์ ํ™”์™€ ๊ด€๋ จ๋œ ์ง„๋‹จ ์ •๋ณด ํ‘œ์‹œ.
    rates	๊ฐ ์†์„ฑ์˜ ์„ฑ๊ณตํ•œ ๋นˆ๋„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    tree	ํ‘œํ˜„์‹ ํŠธ๋ฆฌ๋ฅผ ํ‘œ์‹œ.
    search	๋””๋ ‰ํ† ๋ฆฌ ํŠธ๋ฆฌ๋ฅผ ์ž์„ธํžˆ ํƒ์ƒ‰.
    stat	stat(2), lstat(2)์— ๋Œ€ํ•œ ์ถ”์ ์„ ํ˜ธ์ถœํ•œ๋‹ค.

find ํ‘œํ˜„์‹(expression) ์ •๋ฆฌ

ํ‘œํ˜„์‹ ์˜๋ฏธ
-name ์ฃผ์–ด์ง„ ์ด๋ฆ„์˜ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ฐพ๋Š”๋‹ค (๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ์˜ต์…˜)

$ find -name '*.txt'
ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ดํ•˜์˜ ๋ชจ๋“  ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ .txt๋กœ ๋๋‚˜๋Š” ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์‹น ์ฐพ๋Š”๋‹ค.
-user ์ง€์ •ํ•œ ์‚ฌ์šฉ์ž์˜ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ฐพ๋Š”๋‹ค (์œ„์—๊ฐ€ ์ด๋ฆ„๊ฐ€์ง€๊ณ  ์ฐพ์•˜๋‹ค๋ฉด ์ด๊ฑฐ๋Š” ์‚ฌ์šฉ์ž ๊ธฐ์ค€)
-group ์ง€์ •ํ•œ ๊ทธ๋ฃน ์†Œ์œ ์˜ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ฐพ๋Š”๋‹ค
-uid ์ง€์ •ํ•œ UID์†Œ์œ ์˜ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ฐพ๋Š”๋‹ค (์•„์ด๋””๋ฒˆํ˜ธ๋กœ ์ฐพ๊ธฐ)
-gid ์ง€์ •ํ•œ UID ์†Œ์œ ์˜ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ฐพ๋Š”๋‹ค (๊ทธ๋ฃน๋ฒˆํ˜ธ๋กœ ์ฐพ๊ธฐ)
-perm ์ง€์ •ํ•œ ํ—ˆ๊ฐ€๊ถŒ ๊ฐ’์„ ๊ฐ–๋Š” ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ฐพ๋Š”๋‹ค (permission์˜ ์•ฝ์ž)

ex) -perm 755 : ํผ๋ฏธ์…˜ ๊ฐ’์ด 755๋กœ ์„ค์ •๋œ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ
-type ์ง€์ •ํ•œ ํŒŒ์ผ ์œ ํ˜•์„ ์ฐพ๋Š”๋‹ค.  (ํŒŒ์ผ๋งŒ ์ฐพ๊ณ  ์‹ถ์„๋•Œ ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋งŒ ์ฐพ๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค)

d: ๋””๋ ‰ํ„ฐ๋ฆฌ,
f: ์ผ๋ฐ˜ ํŒŒ์ผ,
l: ๋งํฌ ํŒŒ์ผ,
b: ๋ธ”๋ก ๋””๋ฐ”์ด์Šค,
c: ์บ๋ฆญํ„ฐ ๋””๋ฐ”์ด์Šค,
p:ํŒŒ์ดํ”„ ๋””๋ฐ”์ด์Šค,
s:์†Œ์ผ“ ํŒŒ์ผ

(์ฃผ๋กœ -type f ์˜ต์…˜์ด๋‚˜ -type d ์˜ต์…˜์„ ๋งŽ์ด ์“ด๋‹ค)
-atime n access time ์ ‘๊ทผ ์‹œ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ์ฐพ๋Š”๋‹ค.
n
   : n์ผ ์ด์ „์— ์ ‘๊ทผํ•œ ํŒŒ์ผ ์ฐพ๊ธฐ (exactly)

+n : n๋ณด๋‹ค ์˜ค๋ž˜๋œ ๋…€์„๋“ค ๊ธฐ์ค€ (greater),
-n  : n์ผ๋ถ€ํ„ฐ ์ง€๊ธˆ๊นŒ์ง€ ์ฆ‰ n์ผ ๋‚ด์— ์ ‘๊ทผํ–ˆ๋˜ ํŒŒ์ผ๋“ค์„ ๋ถˆ๋Ÿฌ์ค€๋‹ค. (less)
-ctime n change time ์ˆ˜์ • ์‹œ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ์ฐพ๋Š”๋‹ค 
-mtime n modify time ๋ณ€๊ฒฝ ์‹œ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ์ฐพ๋Š”๋‹ค
-mmin n  mmin์€ ๋ถ„์ด ๊ธฐ์ค€ (mtime์€ ๊ธฐ์ค€์ด day)
-empty ๋นˆ ํŒŒ์ผ(ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ 0์ผ ๊ฒฝ์šฐ)์ด๋‚˜ ๋นˆ ๋””๋ ‰ํ„ฐ๋ฆฌ์ผ ๊ฒฝ์šฐ ์ถœ๋ ฅ
-exec find๋กœ ํŒŒ์ผ์„ ์ฐพ๊ณ  ๋ฐ”๋กœ ์—ฐ๊ณ„ํ•˜์—ฌ ์–ด๋– ํ•œ ๋ช…๋ น์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜.

๊ฒฐ๊ณผ๊ฐ’์€ {} ๊ธฐํ˜ธ๋กœ ํ‘œ์‹œํ•˜๊ณ  \;๋กœ ๋๋‚ด์•ผ ํ•จ.
-ls 'ls -l'๊ณผ ๊ฐ™์€ ์—ญํ• 
-size n n๋ธ”๋ก ๊ธธ์ด์˜ ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค.

+n์€ n๋ธ”๋ก๋ณด๋‹ค ํฐ ํŒŒ์ผ์„ ์ฐพ์œผ๋ฉฐ (greater)
-n์€ n๋ธ”๋ก๋ณด๋‹ค ์ž‘์€ ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค (less)

๋ณดํ†ต nc๋ผ๋Š” ํ˜•ํƒœ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ
n์€ ๋ฌธ์ž ๊ธธ์ด์˜ ํŒŒ์ผ์„ ์˜๋ฏธํ•˜๊ณ , c๋Š” character๋ฅผ ์˜๋ฏธํ•˜์—ฌ 1๋ฌธ์ž๋Š” 1๋ฐ”์ดํŠธ์ด๋ฏ€๋กœ ๋ณดํ†ต ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ธ์‹ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
-inum n node๋ฒˆํ˜ธ๊ฐ€ n์ธ ํŒŒ์ผ ์ฐพ๊ธฐ
-iname ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ณ„ ์•ˆํ•˜๊ณ  ์ด๋ฆ„์œผ๋กœ๋งŒ ์ฐพ์„ ๋•Œ (insensitive์˜ ์•ฝ์ž)
-maxdepth n ๊ฒ€์ƒ‰ ์‹œ ์ฃผ์–ด์ง„ ์ •์ˆ˜๊ฐ’ n๋งŒํผ์˜ ์„œ๋ธŒ ๋””๋ ‰ํ„ฐ๋ฆฌ๋งŒ ๊ฒ€์ƒ‰. (ํ˜„์žฌ ๋‚ด ํด๋”์—์„œ๋ถ€ํ„ฐ n ๊นŠ์ด๊นŒ์ง€๋งŒ)
-mindepth n maxdepth์˜ ๋ฐ˜๋Œ€.
-prune ์ฐพ์€ ๊ฒฐ๊ณผ ์ค‘ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ํ•ด๋‹น๋  ๋•Œ ๊ทธ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฆ„๋งŒ ์ถœ๋ ฅ (ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ํ•ด๋‹น๋˜๋Š”๊ฒŒ ์žˆ์–ด๋„ ๋“ค์–ด๊ฐ€์„œ ์ฐพ์ง€ ์•Š๋Š”๋‹ค)
-newer ์˜ต์…˜ ๋’ค์— ์ ํžŒ ํŒŒ์ผ๋ณด๋‹ค ์ตœ๊ทผ์— ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค

ex) find -newer 'abc.c'
abcํŒŒ์ผ๋ณด๋‹ค ์ตœ๊ทผ์— ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์„ ์ฐพ์Œ
-cnewer ์•ž์˜ newer๊ฐ€ ๋‚ด์šฉ ๋ณ€๊ฒฝ์ด๋ผ๋ฉด cnewer๋ผ๋ฉด ํŒŒ์ผ ์ƒํƒœ
2>/dev/null ๋งจ ๋’ค์— ์ด ์˜ต์…˜์„ ๋ถ™์ด๋ฉด ํผ๋ฏธ์…˜ ์ ‘๊ทผ ๋ถˆ๊ฐ€ํ•œ๊ฒƒ์€ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
-print ๊ฒ€์ƒ‰๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ผ์˜ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ํ‘œ์‹œ. ๋””ํดํŠธ ์˜ต์…˜์ด๋‹ค.
-print0 -print์˜ต์…˜๊ณผ ๊ฐ™์€๋ฐ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ๋ฅผ ํ•œ์ค„๋กœ ์ด์–ด์„œ ํ‘œ์‹œ.

 

ํ‘œํ˜„์‹ ์—ฐ์‚ฐ์ž ์ข…๋ฅ˜

ํ‘œํ˜„์‹ ์‚ฌ์šฉ ์‹œ ์—ฐ์‚ฐ์ž(Operator)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "๋‘ ๊ฐœ ์ด์ƒ์˜ ํ‘œํ˜„์‹" ์กฐํ•ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

ํ‘œํ˜„์‹ ์กฐํ•ฉ ์„ค๋ช…
(expression) expression ์šฐ์„ ์ˆœ์œ„ ์ง€์ •.
!expression
-not expression
expression ๊ฒฐ๊ณผ์— NOT ์—ฐ์‚ฐ.
expression -a expression
expression -and expression
expression expression
expression ๊ฐ„ AND ์—ฐ์‚ฐ.
expression -o expression
expression -or expression
expression ๊ฐ„ OR ์—ฐ์‚ฐ.
find ๋ช…๋ น์—์„œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ๋•Œ ์—ฐ์‚ฐ์ž๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด, ๊ธฐ๋ณธ์ ์œผ๋กœ -a (AND)๊ฐ€ ์ ์šฉ๋œ๋‹ค.
# ๋‘˜์ด ๊ฐ™๋‹ค.
$ find -empty -print
$ find -empty -a -print

find ์‹ค์ „ ์˜ˆ์ œ

 

ํŒŒ์ผ๋ช…์œผ๋กœ ์ฐพ๊ธฐ (-name)

$ find                        # ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ ์ถœ๋ ฅ

$ find -print0                # ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ ์ค„ ๋ฐ”๊ฟˆ ์—†์ด ์ถœ๋ ฅ.

$ find . -empty               # ํ˜„์žฌ ๊ฒฝ๋กœ ํ•˜์œ„์—์„œ ๋นˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ํ˜น์€ ํฌ๊ธฐ๊ฐ€ 0์ธ ํŒŒ์ผ ๊ฒ€์ƒ‰
$ find [PATH]                 # PATH์— ์žˆ๋Š” ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ ๋ฆฌ์ŠคํŠธ ํ‘œ์‹œ.

$ find . -name [FILENAME]     # ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜ ๋ชจ๋“  ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒ€์ƒ‰.

$ find ~ -name [FILENAME]     # ์‚ฌ์šฉ์ž์˜ ํ™ˆ๋””๋ ‰ํ„ฐ๋ฆฌ ํ•˜์œ„์—์„œ ํŒŒ์ผ์ด๋ฆ„ ๊ฒ€์ƒ‰
$ find . -name "STR*"         # ์ง€์ •๋œ ๋ฌธ์ž์—ด๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŒŒ์ผ ๊ฒ€์ƒ‰.

$ find . -name "*STR*"        # ์ง€์ •๋œ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋œ ํŒŒ์ผ ๊ฒ€์ƒ‰.

$ find . -name "*STR"         # ์ง€์ •๋œ ๋ฌธ์ž์—ด๋กœ ๋๋‚˜๋Š” ํŒŒ์ผ ๊ฒ€์ƒ‰.


$ find . -name "B*"           # B๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŒŒ์ผ ๊ฒ€์ƒ‰. ๊ฒฐ๊ณผ : ./B_FILE

$ find /user -name '*.txt'    # /user ๋””๋ ‰ํ† ๋ฆฌ์—์„œ .txt ํŒŒ์ผ์ด๋ฆ„์œผ๋กœ ๋๋‚˜๋Š” ํŒŒ์ผ์ด๋ฆ„ ๊ฒ€์ƒ‰

$ find . -name "*.EXT" -delete # ํ™•์žฅ์ž ๊ฒ€์ƒ‰ ํ›„ ํŒŒ์ผ ์‚ญ์ œ.

 

 

ํƒ€์ž…์œผ๋กœ ์ฐพ๊ธฐ (-type)

option type
f regular file
d directory
c character special
b block special
l symbolic link
s socket
p fifo
# ํ˜„์žฌ ๊ฒฝ๋กœ ํ•˜์œ„ ํŒŒ์ผ/๋””๋ ‰ํ„ฐ๋ฆฌ/์‹ฌ๋ณผ๋ฆญ๋งํฌ์—์„œ [NAME]์„ ๊ฒ€์ƒ‰
$ find . -name [NAME] -type f,d,l       
# -type ์ข…๋ฅ˜
 # b : block special
 # c : character special
 # d : directory
 # f : regular file
 # l : symbolic link
 # p : FIFO
 # s : socket

$ find . -name build -type f            # build๋ผ๋Š” ์ด๋ฆ„์˜ ์ผ๋ฐ˜ ํŒŒ์ผ ๊ฒ€์ƒ‰.

$ find . -name PROJ -type d             # PROJ๋ผ๋Š” ์ด๋ฆ„์˜ ๋””๋ ‰ํ† ๋ฆฌ๋งŒ ๊ฒ€์ƒ‰

 

 

ํŒŒ์ผ ํฌ๊ธฐ๋กœ ์ฐพ๊ธฐ (-empty, -size)

์˜ต์…˜ ๋‹จ์œ„
c 1byte ๋‹จ์œ„
b 1block ๋‹จ์œ„(1block = 512 bytes)
w 2 bytes ๋‹จ์œ„
k 1 kilobytes
M 1 metabytes
G 1 gigabytes
# ํ˜„์žฌ ๊ฒฝ๋กœ ํ•˜์œ„์—์„œ ํŒŒ์ผ ์‚ฌ์ด์ฆˆ๋กœ ๊ฒ€์ƒ‰
$ find . -size +[SIZE1]c -size -[SIZE2]c 
 # ํŒŒ์ผ ํฌ๊ธฐ ๊ฐ’ ๋’ค์— 'c' ๋˜๋Š” 'k'๋ฅผ ๋ถ™์ž„์œผ๋กœ์จ ๋ฐ”์ดํŠธ ๋‹จ์œ„ ๋˜๋Š” ํ‚ฌ๋กœ๋ฐ”์ดํŠธ์˜ ํฌ๊ธฐ ๊ฐ’์„ ์ง€์ •
 # b:block, c:bytes, w:2bytes, k:kbytes, M:mbytes, G:gbytes
 # +(์ดˆ๊ณผ) ๋˜๋Š” -(๋ฏธ๋งŒ) 

$ find . -size 1024c                    # ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ 1024 ๋ฐ”์ดํŠธ์ธ ํŒŒ์ผ ๊ฒ€์ƒ‰.

$ find . -size +1024c                   # ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ 1024 ๋ฐ”์ดํŠธ๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ํŒŒ์ผ ๊ฒ€์ƒ‰.

$ find . -size -1024c                   # ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ 1024 ๋ฐ”์ดํŠธ ๋ฏธ๋งŒ์ธ ํŒŒ์ผ ๊ฒ€์ƒ‰.

$ find . -size +1024c -size -2048c      # ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ 1024 ๋ฐ”์ดํŠธ ์ดˆ๊ณผ, 2048 ๋ฐ”์ดํŠธ ๋ฏธ๋งŒ์ธ ํŒŒ์ผ ๊ฒ€์ƒ‰

# . ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ํƒ€์ž…์ด d(๋””๋ ‰ํ† ๋ฆฌ) ์ธ ํŒŒ์ผ๋“ค ์ค‘์— ์‚ฌ์ด์ฆˆ๊ฐ€ 100์ด์ƒ์ธ๊ฑธ ๊ฒ€์ƒ‰
$ find . -type d -size +100

 

 

๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ๋ฒ• (-print / -print0)

์ผ๋ฐ˜์ ์œผ๋กœ print๊ฐ€ ๊ธฐ๋ณธ ์˜ต์…˜์ด๊ณ  ๋ณ„๋„๋กœ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด -print ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.
์ฐพ์€ ๋‚ด์šฉ์ด ํ™”๋ฉด์œผ๋กœ ์ถœ๋ ฅ๋˜๋ฉฐ ๊ฐ ๊ฒฐ๊ณผ๋Š” newline(๊ฐ ๋ผ์ธ์ด ๊ฐœํ–‰๋˜๋ฉฐ ๋ณด๊ธฐ์ข‹๊ฒŒ)์œผ๋กœ ๋๋‚œ๋‹ค.

๋ฐ˜๋ฉด -print0 ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ๊ฒฐ๊ณผ๋Š” null ๋ฌธ์ž(\0)๋กœ ๋๋‚œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ ๋Š” ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์— newline์ด๋‚˜ ๊ณต๋ฐฑ์ด ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ ์ •ํ™•ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ™”๋ฉด์— ๋ณด๊ธฐ์—๋Š” ํ•œ์ค„๋กœ ์ฒ˜๋ฆฌ๋˜์–ด ์ข‹์ง€๋Š” ์•Š๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด, -print0 ์„ ์“ฐ๋Š” ๊ฒƒ์€ ์ฐพ์€ ํŒŒ์ผ๋กœ ๋‹ค๋ฅธ ์ผ์„ ํ•  ๋•Œ ์ •ํ™•ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

$ find ./ -name "*.bak" -print

$ find ./ -name "*.bak" -print0

-print0

 

 

๊ฒ€์ƒ‰๋œ ํŒŒ์ผ์—์„œ ์ถ”๊ฐ€ ๋ช…๋ น ์‹คํ–‰ํ•˜๊ธฐ (-exec)

  • {} : find ์—์„œ ์ฐพ์•„๋‚ธ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ํ•˜๋‚˜์”ฉ ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„
  • \; : -exec ๋‹ค์Œ๋ถ€๋ถ„์— ๋‚˜์™€์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ผ๋Š” ๋ถ€๋ถ„

ํŒŒ์ผexec

# ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ c ํ™•์žฅ์ž ํŒŒ์ผ ์ƒ์„ธ ์ •๋ณด ์ถœ๋ ฅ. (ls ๋ช…๋ น ์‹คํ–‰)
$ find . -name "*.c" -exec ls -l {} \;  


# ํ™•์žฅ์ž๊ฐ€ c ์ธ ํŒŒ์ผ์˜ ๋ผ์ธ ์ˆ˜ ์ถœ๋ ฅ. (wc ๋ช…๋ น ์‹คํ–‰)
$ find . -name "*.c" -exec wc -l {} \;            


# .c ํŒŒ์ผ์— ๋ฌธ์ž์—ด main์ด ์žˆ๋Š”์ง€ ๊ฒ€์ƒ‰. (grep ๋ช…๋ น ์‹คํ–‰)
$ find . -name "*.c" -exec grep "main" {} \;   


# .java ํŒŒ์ผ์— ๋ฌธ์ž์—ด class๊ฐ€ ์žˆ๋Š” ๋ผ์ธ ํ‘œ์‹œ.
$ find . -name "*.java" -exec grep -n "class" {} \;         


# ๊ฒ€์ƒ‰๋œ ํŒŒ์ผ์„ ํŠน์ • [๊ฒฝ๋กœ]๋กœ ๋ณต์‚ฌ (cp ๋ช…๋ น ์‹คํ–‰) > tar.gz ํŒŒ์ผ์„ /mnt/usb/ ์— ๋ณต์‚ฌ
$ find . -name "*.tar.gz" -exec cp {} /mnt/usb/ \;       


# ๋ชจ๋“  c ํŒŒ์ผ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ source-list.txt์— ์ €์žฅ (์ž…์ถœ๋ ฅ ์žฌ์ง€์ • redirection ">" ์‹คํ–‰)
$ find . -name "*.c" > source-list.txt   
$ find / -name "*.c" 2> /dev/null # ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š์Œ. (์ž…์ถœ๋ ฅ ์žฌ์ง€์ • ๋ช…๋ น์–ด ํฌ์ŠคํŠธ ์ฐธ๊ณ ํ• ๊ฒƒ)


# ๊ฒ€์ƒ‰๋œ ํŒŒ์ผ๋กœ ์••์ถ•ํŒŒ์ผ ์ƒ์„ฑ (tar ๋ช…๋ น ์‹คํ–‰)
$ find . -name [NAME] -exec tar -xcvf [ํŒŒ์ผ๋ช…] {} \;


# test ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊ถŒํ•œ์ด rw-rw-r-- ์ธ ํŒŒ์ผ์„ findํ•ด์„œ (rm ๋ช…๋ น ์ˆ˜ํ–‰)
$ find test -perm 664 -exec rm {} \;

 

+ ํŒ ( ๊ตฌ๋ถ„์ž + ์™€ \; ์˜ ์ฐจ์ด)

-exec ์˜ต์…˜์˜ ์ œ์ผ ๋์— ๊ตฌ๋ถ„์ž๋Š” + ์™€ \; ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š”๋ฐ ์„ฑ๋Šฅ ๋ฉด์—์„œ + ๊ฐ€ ๋” ์ข‹๋‹ค๊ณ  ์•Œ๋ ค์ ธ ์žˆ๋‹ค.

์™œ๋ƒํ•˜๋ฉด \; ๋ฅผ ๋งˆ์ง€๋ง‰ ๊ตฌ๋ถ„์ž๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ํŒŒ์ผ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋กœ ์ธํ•ด, RAM๊ณผ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๋ชจ๋‘์—์„œ ์‹ฌ๊ฐํ•œ ํŽ˜๋„ํ‹ฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ตฌ๋ถ„์ž ๋”ํ•˜๊ธฐ ๊ธฐํ˜ธ '+๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ํ‘œํ˜„์‹์˜ ๊ฒฐ๊ณผ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์ „์ฒด์ ์œผ๋กœ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” -exec ๋ช…๋ น์— ์ „๋‹ฌ๋œ๋‹ค.

find -name 'ํŒŒ์ผ๋ช…*' -exec tar -cvfz ํŒŒ์ผ๋ช….tar.gz {} \;

find -name 'ํŒŒ์ผ๋ช…*' -exec tar -cvfz ํŒŒ์ผ๋ช….tar.gz {} +

 

 

ํŠน์ • ํŒŒ์ผ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ํŒŒ์ผ์„ ๊ฒ€์ƒ‰ (-perm)

$ find . -perm 0664 # ํ˜„์žฌ ๊ฒฝ๋กœ์—์„œ ํŠน์ •๊ถŒํ•œ์˜ ํŒŒ์ผ/๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒ€์ƒ‰

# test ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊ถŒํ•œ์ด rw-rw-r-- ์ธ ํŒŒ์ผ์„ findํ•ด์„œ rm๋ช…๋ น ์ˆ˜ํ–‰
$ find test -perm 664 -exec rm {} \;

๊ถŒํ•œ

 

 

์ •๊ทœํ‘œํ˜„์‹ ํŒจํ„ด์œผ๋กœ ํŒŒ์ผ๋ช… ๊ฒ€์ƒ‰ (-regex)

  • -regex ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด grep์ฒ˜๋Ÿผ ํŒŒ์ผ์ด๋ฆ„์„ ํŒจํ„ด ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค
# ํŒŒ์ผ ์ด๋ฆ„์ด ์ˆซ์ž.txt ์ธ ๊ฒƒ๋“ค
find . -regex ".*/[0-9]+.txt"

 

 

ํŠน์ • ์‹œ๊ฐ„ ์ดํ›„/์ด์ „ ์ˆ˜์ •๋œ ํŒŒ์ผ (-mtime, -atime, -ctime)

  • -mtime, -atime, -ctime ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ ‘๊ทผ/์ƒ์„ฑ/๋ณ€๊ฒฝ ๋“ฑ์˜ ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
# ๋งŒ์ผ ํ˜„์žฌ์‹œ๊ฐ„์ด 10์›” 10์ผ ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด,

$ find -mtime -3 # 3์ผ(72์‹œ๊ฐ„)๋ณด๋‹ค ์ƒˆ๋กœ์›€ -> 10.7 ~

$ find -mtime 3  # 4์ผ(96์‹œ๊ฐ„) ์ „์—์„œ 3์ผ(72์‹œ๊ฐ„)์ „๊นŒ์ง€ -> 10.6 ~ 10.7

$ find -mtime +3 # 4์ผ(96์‹œ๊ฐ„)์ „๋ณด๋‹ค ๊ณผ๊ฑฐ -> ~ 10.6

mtime-ํƒ€์ž„์Šคํƒฌํ”„

+ ๊ฐœ๋…์ด ๋‚œํ•ดํ•œ find ํƒ€์ž„์Šคํƒฌํ”„ ์˜ต์…˜์— ๋Œ€ํ•ด์„œ ๋”ฐ๋กœ ์ƒ์„ธํžˆ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค.

 

[LINUX] ๐Ÿ“š find ๋ช…๋ น mtime ์˜ต์…˜ +n, -n ๊ฐœ๋… ์ •๋ฆฌ (ํƒ€์ž„์Šคํƒฌํ”„)

๋ฆฌ๋ˆ…์Šค ํƒ€์ž„์Šคํƒฌํ”„ ๋ฆฌ๋ˆ…์Šค์—์„œ ๋‹ค์–‘ํ•œ ์‹œ๊ฐ„์ •๋ณด(Timestamps)๋ฅผ ๊ธฐ๋กํ•˜๋Š”๋ฐ inode ๋ผ๋Š” ๊ณณ์— ์ €์žฅ์ด ๋œ๋‹ค. inode์— ์ €์žฅ๋˜๋Š” ์‹œ๊ฐ„์ •๋ณด๋Š” ctime, mtime, atime์ด ์กด์žฌํ•œ๋‹ค. $ stat [ํŒŒ์ผ๋ช…] atime (access time,..

inpa.tistory.com

 

 

ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ ๋ฌด์‹œํ•˜๊ธฐ (-prune)

$ find . -name "*๋ฌธ์ž*" -prune

prune

 

 

์„œ๋ธŒ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์šฉ ์ œํ•œ ๊ฒ€์ƒ‰ (-depth)

  • -maxdepth 1 : ์ตœ๋Œ€ ๋””๋ ‰ํ† ๋ฆฌ ํ•œ ๋‹จ๊ณ„๋งŒ
  • -mindepth 1 : ๋ช…๋ นํ–‰ ์ง€์ •๋œ ๊ฒฝ๋กœ(ํ•œ ๋‹จ๊ณ„)๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ฐพ๊ธฐ
$ find . -maxdepth 1 -name [NAME] # ํ˜„์žฌ ๊ฒฝ๋กœ์—์„œ๋งŒ [NAME] ๊ฒ€์ƒ‰ (ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฏธํฌํ•จ)

 

 

๋™์ผ ์ด๋ฆ„ ํŒŒ์ผ ๋ชฉ๋ก ์–ป๊ธฐ

$ find . -type f -printf "%f\n" | sort | uniq -c | grep -v ' 1 '
 
 

ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ํŒŒ์ผ ๊ฐฏ์ˆ˜

$ find */ | cut -d/ -f1 | uniq -c

๋ฆฌ๋ˆ…์Šค-find


# ์ฐธ๊ณ ์ž๋ฃŒ

https://recipes4dev.tistory.com/156

https://jhnyang.tistory.com/144 

https://www.psjco.com/24