λλ ν 리μ find
λͺ¨λ pdf νμΌμ λ³Ό λ μ¬μ© νκ³ μμ΅λλ€ . κ·Έλ€μ μ κ±°νκΈ° μν΄ μλνμ΅λλ€./home
access denied
find /home -iname "*.pdf" | grep -v "access denied"
κ·Έλ¬λ κ²°κ³Όλ λμΌν©λλ€. μ΄ μ€μ μ΄λ»κ² μ κ±° ν μ μμ΅λκΉ?
λ΅λ³
access denied
μΆλ ₯μ΄ μ€λ₯μ΄λ©°μ νμ΄νλλ STDOUT λμ STDERRλ‘ μ μ‘λμ΄ μλνκΈ° λλ¬Έμ μλνμ§ μμμ΅λλ€ grep
.
STDERR λ§ λ¦¬λλ μ νμ¬ μ΄λ¬ν μ€λ₯κ° νμλμ§ μλλ‘ ν μ μμ΅λλ€
find /home -iname "*.pdf" 2>/dev/null
λλ David Foersterκ° μΈκΈνλ―μ΄ STDERRμ λ κ°κ²°νκ² λ«μ μ μμ΅λλ€.
find /home -iname "*.pdf" 2>&-
κ·Έλ¬λ μ€μ λ‘ λ€λ₯Έ μ¬μ©μ보λ€λ μ§μ κ²μνκ³ μΆκΈ° λλ¬Έμ μ€μ λ‘ μνλ κ²½μ°κ° μμ΅λλ€.
find ~ -iname "*.pdf"
μ€λ₯κ° λ°μνλ©΄ λ‘컬 ꡬμ±μ μλͺ»λ μμ κΆμ΄μμ μ μμΌλ―λ‘ μ‘°μ¬ν΄μΌν©λλ€.
λ΅λ³
μ‘μΈμ€ κ±°λΆκ° stderr
μλ μ μΈμ λ μ stdout
μμ΅λλ€.
μ΄ μλ:
find /home -iname "*.pdf" 2>&1 | grep -v "access denied"
λ 2>&1
μ μΆλ ₯ 리λλ μ
stderr
μλ₯Ό stdout
κ·Έ λλ¬Έμ, grep -v
κ·Έ μΌμ ν μ μμ΅λλ€. (κΈ°λ³Έμ μΌλ‘ |
νμ΄ν λ§ stdout
μκ³ stderr
)
λ΅λ³
λΉμ μ μλ§ νκ· λ¬΄μμΈκ° β μ΄λ€ βμ¬μ© κΆνμ΄ κ±°λΆλμμ΅λλ€β find
μ°λΆν¬ μΌμμ λΉμ μ΄ λλ¬Έμ νμΌ κΆν-보λ€λ μλ μ‘μΈμ€ λκ° βμ‘μΈμ€ κ±°λΆβν μ μμ΅λλ€.
μ΄ μμ μ μ¬λ°λ₯΄κ² μννλ μμ ν μΌλ°μ μΈ λͺ λ Ή νλ (κ·Έλ¦¬κ³ λ³΄λμ€ λ©μμ§λ μ€λ₯ λ©μμ§κ° λμΌν ν λ€λ₯Έ * nix esλ‘ μ΄μ κ°λ₯ )λ λ€μκ³Ό κ°μ΅λλ€.
(find 3>&1 1>&2 2>&3 3>&- | grep -Fv 'Permission denied') 3>&1 1>&2 2>&3 3>&-
(λ³΄ν΅ λΉμ μ λͺ κ°μ§ μΈμλ₯Ό μ λ¬νλ €κ³ ν©λλ€ find
. 첫 λ²μ§Έ 리λλ μ
μ μκ°λλ€ 3>&1
.)
κ·Έλ¬λ μ’ μ’ λ κ°λ¨ν κ²μ μ¬μ©ν μ μμ΅λλ€. μλ₯Ό λ€μ΄ νλ‘μΈμ€ λ체λ₯Ό μ¬μ©ν μ μμ΅λλ€ . μμΈν λ΄μ©μ λ€μκ³Ό κ°μ΅λλ€.
κ°μ₯ μΌλ°μ μΈ λ°©λ²κ³Ό νκ³
λ κ°μ μΌλ°μ μΈ μ κ·Ό λ°©μμ λ²λ¦΄ μ μμ΅λλ€ νμ€ μ€λ₯ (κ°μ΄ ZANNAμ λλ΅ ) λμ λν νμ€ μ€λ₯ 리λλ μ νμ€ μΆλ ₯ (κ°μ΄ λ° νν° νμ€ μΆλ ₯μ μλλ‘μ΄λ λ°λΈμ λλ΅ ). κ·Έκ²λ€μ μμ±νκΈ° μ½λ€λ μ₯μ μ΄ μμΌλ©° μ’ μ’ ν©λ¦¬μ μΈ μ νμ΄μ§λ§, μ΄λ¬ν μ κ·Όλ²μ μ΄μμ μ΄μ§ μμ΅λλ€.
stderrλ‘ μ μ‘ λ λͺ¨λ νλͺ©μ νκΈ° νλ©΄ (μ : λ μ₯μΉ λ‘ λ¦¬λλ μ
2>/dev/null
νκ±°λ λ«λ 2>&-
λ±) βPermission deniedβμ΄μΈμ μ€λ₯κ° λ°μν μνμ΄ μμ΅λλ€.
βκΆνμ΄ κ±°λΆλμμ΅λλ€βλ μ€νν λ λ°μνλ κ°μ₯ μΌλ°μ μΈ μ€λ₯ μΌ μ find
μμ§λ§ κ°λ₯ν μ μΌν μ€λ₯λ μλλ©° λ€λ₯Έ μ€λ₯κ° λ°μνλ©΄ μ΄μ λν΄ μκ³ μΆμ μ μμ΅λλ€. νΉν find
μμμ μ΄ μμΌλ©΄ βν΄λΉ νμΌ λλ λλ ν λ¦¬κ° μμ΅λλ€βλΌκ³ λ³΄κ³ ν©λλ€. μμμ μ΄ μ¬λ¬ κ°μΈ find
κ²½μ°μλ μ¬μ ν μ μ©ν κ²°κ³Όκ° λ°νλμ΄ μλνλ κ²μ²λΌ λ³΄μΌ μ μμ΅λλ€. μλ₯Ό λ€μ΄, a
λ° c
μ‘΄μ¬νμ§λ§ μ‘΄μ¬ b
νμ§ μλ κ²½μ°μ find a b c -name x
κ²°κ³Όλ₯Ό μΈμ a
ν λ€μμ βNo such file or directoryβλ₯Ό νμ b
ν λ€μ κ²°κ³Όλ₯Ό νμ c
ν©λλ€.
νμ€ μΆλ ₯μΌλ‘ ν¨κ» νμ€ μΆλ ₯κ³Ό νμ€ μλ¬λ₯Ό κ²°ν©νκ³ λ°°κ΄ μΌλ‘ grep
λλ λ€λ₯Έ λͺ
λ Ήκ³Όνλ©΄μΌλ‘νλ νν° 2>&1 | grep ...
λλ |& grep ...
μ€μλ‘ μ΄λ¦μ΄ μ¬κ³Όλλ λ©μμ§λ₯Ό ν¬ν¨νλ νμΌμ νν°λ§μ μν -runs.
μλ₯Ό λ€μ΄ βPermission deniedβκ° ν¬ν¨ λ νμ νν°λ§νλ©΄ βPermission denied messages.txtβμ κ°μ νμΌ μ΄λ¦μ νμνλ κ²μ κ²°κ³Όλ μμ λ©λλ€. κ²μμ λ°©ν΄ ν μ μλλ‘ νΉμνκ² μ‘°μ λ μ΄λ¦μ νμΌμ λΆμ¬νλ κ²λ κ°λ₯νμ§λ§ μ°μ°ν λ°μν μ μμ΅λλ€.
κ²°ν© λ μ€νΈλ¦Όμ μ¬κ³Όνλ κ²μ λ λ€λ₯Έ λ¬Έμ μ μ΄ μλλ°, μ΄λgrep -vx 'find: .*: Permission denied'
νμ΄νμ μ°μΈ‘μμ μ κ°μ΄ λ³΄λ€ μ νμ μΌλ‘ μ¬κ³Όν¨μΌλ‘μ¨ μν λ μ μλ€ . find
μ‘°μΉ -print
λ₯Ό μ§μ νμ§ μμ λ λ΄μ¬ λ μ‘°μΉλ₯Ό ν¬ν¨νμ¬ μΌλΆ μ‘°μΉ λ stdout μ΄ ν°λ―Έλ μΈμ§ μ¬λΆμ λ°λΌ νμΌ μ΄λ¦μ μΆλ ₯νλ λ°©λ²μ κ²°μ ν©λλ€ .
- ν°λ―Έλ μ΄ μλ κ²½μ° νμΌ μ΄λ¦μ μ€ λ°κΏκ³Ό κ°μ μ΄μν λ¬Έμμ ν°λ―Έλμ λμμ λ³κ²½ν μμλ μ μ΄ λ¬Έμμ κ°μ μ΄μν λ¬Έμλ₯Ό ν¬ν¨νλλΌλ κ·Έλλ‘ μΆλ ₯λ©λλ€. μ΄ κ²½μ° μ
λλ€ ν°λ―Έλ, μ΄λ€ λ¬Έμλ μ΅μ νκ³
?
λμ μΈμλ©λλ€. - μ΄κ²μ μΌλ°μ μΌλ‘ μνλ κ²μ λλ€. νμΌ μ΄λ¦μ λ μ²λ¦¬νλ €λ©΄ λ¬Έμ κ·Έλλ‘ μΆλ ₯ν΄μΌν©λλ€. κ·Έλ¬λ νμΌμ νμνλ €λ κ²½μ° μ€ λ°κΏμ΄μλ νμΌ μ΄λ¦μ μ¬λ¬ νμΌ μ΄λ¦μ λͺ¨λ°© ν μ μμΌλ©° μΌλ ¨μ λ°± μ€νμ΄μ€ λ¬Έμκ°μλ νμΌ μ΄λ¦μ λ€λ₯Έ μ΄λ¦μΌλ‘ νμ λ μ μμ΅λλ€. ν°λ―Έλμ μμμ λ³κ²½νλ μ΄μ€μΌμ΄ν μνμ€κ° ββν¬ν¨ λ νμΌ μ΄λ¦κ³Ό κ°μ λ€λ₯Έ λ¬Έμ λ κ°λ₯ν©λλ€.
- κ·Έλ¬λ κ°μ λ€λ₯Έ λͺ
λ Ήμ ν΅ν΄ κ²μ κ²°κ³Όλ₯Ό νμ΄ν
grep
νλ©΄find
λ μ΄μ ν°λ―Έλμ΄ νμλμ§ μμ΅λλ€. (λ μ ννκ² λ§νλ©΄, stdoutμ΄ ν°λ―Έλμ΄λμ§ μκ²λ©λλ€.) κ·Έλ¬λ©΄ μ΄μν λ¬Έμκ° λ¬Έμ κ·Έλλ‘ μΆλ ₯λ©λλ€. κ·Έλ¬λ νμ΄νμ μ€λ₯Έμͺ½μμλ λͺ¨λ λͺ λ Ήμ΄ (a) βPermission deniedβλ©μμ§μ²λΌ 보μ΄λ νμ μ κ±°νκ³ (b) λ¨μμλ κ²μ μΈμνλ κ²½μ° μ¬μ νfind
ν°λ―Έλ μΈ shenanigansμ μ’ μλ©λλ€. κ°μ§λ λ°©μ§νκΈ°μν κ²μ λλ€. man find
νμΌ μ΄λ¦μ μΈμνλ κ° λμμ λμμ ν¬ν¨νμ¬ μμΈν λ΄μ©μ λΉμ μμ μΈ νμΌ μ΄λ¦ μΉμ μ μ°Έμ‘°νμμμ€ . ( βλ§μ find λμμ λ€λ₯Έ μ¬μ©μμ ν΅μ νμμλ λ°μ΄ν°λ₯Ό μΈμ ν λ λ°μν©λλ€ β¦β ) GNU Findutils μ°Έμ‘° 맀λ΄μΌ μ 3.3.2.1 , 3.3.2.2 λ° 3.3.2.3 μ λ μ°Έμ‘°νμμμ€ .
λΉμ μμ μΈ νμΌ μ΄λ¦μ λν μμ λ
Όμλ GNU find μ κ΄λ ¨ μ΄ μμΌλ©°, μ΄λ find
Ubuntuλ₯Ό ν¬ν¨ν GNU / Linux μμ€ν
μμ ꡬνλ©λλ€.
νμ€ μ€λ₯λ₯Ό νν°λ§νλ λμ νμ€ μΆλ ₯μ κ·Έλλ‘ μ μ§
λΉμ μ΄ μ λ§λ‘ μνλ κ²μ stderr λ₯Ό λ°°κ΄νλ λμ stdoutμ κ·Έλλ‘ λλ κ² μ
λλ€. λΆννλ μ΄μ λν κ°λ¨ν ꡬ문μ μμ΅λλ€. νμ΄ν stdout λ°μ ν¬ν¨νμ¬ μΌλΆ μ (μ ν¬ν¨νμ¬ )μ΄ λ μ€νΈλ¦Όμ λͺ¨λ νμ΄ν νλλ‘ μ§μ νκ±°λ stderrλ₯Ό stdoutμΌλ‘ λ¨Όμ 리λλ μ
ν μ μμ΅λλ€ . κ·Έλ¬λ μΌλ°μ μΌλ‘ μ¬μ©λλ μμ νμ΄ν stderrμλ§ κ΅¬λ¬Έμ μ 곡νμ§ μμ΅λλ€.grep
|
bash
|&
2>&1 |
μ¬μ ν ν μ μμ΅λλ€. μ΄μνλ€. ν κ°μ§ λ°©λ²μ stdoutμ stderrλ‘ λ°κΎΈμ΄ κ²μ κ²°κ³Όκ° stderrμ μκ³ μ€λ₯κ° stdoutμμλ κ²½μ° stdoutμ νμ΄ν grep
νμ¬ νν°λ§ν©λλ€.
find args 3>&1 1>&2 2>&3 3>&- | grep -Fv 'Permission denied'
μΌλ°μ find
μΌλ‘ μμμ (μΌλ°μ μΌλ‘ λλ ν 리 μΈ κ²μ μμΉ) λ° μ μ΄ (ν
μ€νΈ λ° μ‘°μΉ)μ κ°μ μΈμλ₯Όμ μ λ¬ ν©λλ€. μ΄λ€μ args
μ λμ μ¬μ© λ©λλ€.
μ΄κ²μ κ΅ννλ €λ λ νμ€ μ€νΈλ¦Ό μ€ νλλ₯Ό μ μ§νκΈ° μν΄ μ νμΌ λμ€ν¬λ¦½ν° λ₯Ό λμ νκ³ ,μ΄λ₯Ό μ¬ μ§μ νκΈ° μν΄ κ²½λ‘ μ¬ μ§μ μ μννκ³ , μ νμΌ λμ€ν¬λ¦½ν°λ₯Ό λ«μ μλν©λλ€.
- νμΌ λμ€ν¬λ¦½ν° 1μ stdoutμ΄κ³ 2λ stderrμ λλ€ (κ·Έλ¦¬κ³ κ²½λ‘ μ¬ μ§μ λμ§ μμ 0μ stdin ). κ·Έλ¬λ λ€λ₯Έ νμΌ μ€λͺ μλ₯Ό μ¬μ©νμ¬ λ¦¬λλ μ ν μλ μμ΅λλ€. νμΌμ΄λ μ₯μΉλ₯Ό μ΄κ±° λ μ΄μ΄ λλ λ° μ¬μ©ν μ μμ΅λλ€.
3>&1
stdout (νμΌ μ€λͺ μ 1)μ΄ λμ€μ 리λλ μ λ λ μλ stdoutμ μ½κ² μΈ μ μλλ‘ νμΌ μ€λͺ μ 3μ stdoutμΌλ‘ 리λλ μ ν©λλ€.1>&2
stdoutμ stderrλ‘ λ¦¬λλ μ ν©λλ€. νμΌ λμ€ν¬λ¦½ν° 3μ μ¬μ ν ββμλ stdoutμ΄λ―λ‘ μ¬μ ν μ‘μΈμ€ ν μ μμ΅λλ€.2>&3
stderrμ μλ stdout μΈ νμΌ λμ€ν¬λ¦½ν° 3μΌλ‘ κ²½λ‘ μ¬ μ§μ ν©λλ€.3>&-
λ μ΄μ νμνμ§ μμ νμΌ μ€λͺ μ 3μ λ«μ΅λλ€.- μμΈν λ΄μ©μ stdoutμ΄ μλ stderrλ₯Ό νμ΄ννλ λ°©λ²μ μ°Έμ‘°νμμμ€ . λ° IO μ¬ μ§μ β νμ€ μΆλ ₯κ³Ό νμ€ μλ¬ (κ³ κΈ) μ€μν νΉν νν°λ₯Ό ν΅ν΄μλ§ νμ€ μ€λ₯ νμ΄νλ₯Ό .
κ·Έλ¬λμ΄ λ°©λ²μ κ²μ κ²°κ³Όκ° stderrλ‘ μ μ‘λκ³ μ€λ₯κ° stdoutμΌλ‘ μ μ‘ λλ λ¨μ μ΄ μμ΅λλ€. λνμ μμμ μ§μ μ΄ λͺ λ Ήμ μ€ννκ³ λ μ΄μ μΆλ ₯μ νμ΄ννκ±°λ 리λλ μ νμ§ μμΌλ©΄ μ€μ λ‘ μ€μνμ§ μμ΅λλ€. κ·Έλ μ§ μμΌλ©΄ λ¬Έμ κ° λ μ μμ΅λλ€. ν΄λΉ λͺ λ Ήμ μ€ν¬λ¦½νΈμ λ£μ λ€μ λκ΅°κ° (μλ§ λμ€μ λμ€μ) μΆλ ₯μ μ¬ μ§μ νκ±°λ νμ΄ν νλ©΄ μμλλ‘ μλ νμ§ μμ΅λλ€ .
ν΄κ²°μ±
μ μΆλ ₯ νν°λ§μ΄ λλλ©΄ μ€νΈλ¦Όμ λ€μ λ°κΎΈλ κ² μ
λλ€. νμ΄ν λΌμΈμ μ€λ₯Έμͺ½μ μμ νμλ λμΌν 리λλ μ
μ μ μ©νλ©΄ |
νμ΄ν stdout λ§ κ°λ₯νλ―λ‘ νμ΄ν λΌμΈμ μΈ‘λ©΄μ μλ μ€νΈλ¦Όμ΄ κ΅νλμ§ μμκΈ° λλ¬Έμ μλ stderrλ‘ μ μ‘ λ μΆλ ₯ λ§ μμ νκΈ° λλ¬Έμμ΄λ₯Ό λ¬μ±νμ§ λͺ»ν©λλ€ νμ€ μΆλ ₯. λμ μλΈ μ ( related ) μμ(
)
μμ λͺ
λ Ήμ μ€ν ν λ€μ μ€μ ν 리λλ μ
μ μ μ© ν μ μμ΅λλ€.
(find args 3>&1 1>&2 2>&3 3>&- | grep -Fv 'Permission denied') 3>&1 1>&2 2>&3 3>&-
μ΄ μμ
μ μννλ κ²μ νΉν μλΈ μμ΄ μλ κ·Έλ£Ήνμ
λλ€. μνλ κ²½μ° λ€μμ μ¬μ©ν μ μμ΅λλ€ {
;}
.
{ find args 3>&1 1>&2 2>&3 3>&- | grep -Fv 'Permission denied'; } 3>&1 1>&2 2>&3 3>&-
λ λ²κ±°λ‘μ΄ λ°©λ² : νλ‘μΈμ€ λ체
Ubuntuμ κ°μ GNU / Linux μμ€ν
μ ν¬ν¨νμ¬μ΄λ₯Ό μ§μν μμλ μμ€ν
μ Bashλ₯Ό ν¬ν¨ν μΌλΆ μ
Έ μ μ¬μ©νλ©΄ λͺ
λ Ήμ μ€ννκ³ ν΄λΉ μ€νΈλ¦Ό μ€ νλμμ 리λλ μ
ν μμλ νλ‘μΈμ€ λ체 λ₯Ό μν ν μ μμ΅λλ€. λΉμ μ 리λλ μ
ν μ μμ΅λλ€ find
Aμ λͺ
λ Ήμ νμ€ μ€λ₯ grep
λ₯Ό νν°λ§ λͺ
λ Ή, κ·Έ 리λλ μ
grep
νμ€ μ€λ₯μ λͺ
λ Ήμ νμ€ μΆλ ₯μ.
find args 2> >(grep -Fv 'Permission denied' >&2)
ν¬λ λ§μ μ΄ μμ΄λμ΄ λ₯Ό μν΄ Android Dev λ‘κ°λλ€ .
- stdoutμ΄ μλ stderrλ₯Ό νμ΄ννλ λ°©λ²μ λν Pinkoμ λ΅λ³ μ μ°Έμ‘°νμμμ€ .
- μ΄ λ μμ λ λͺ¨λ μ¬μ©
1>&2
ν©λλ€. Iκ° μ¬μ©νκ³>&2
, λ±κ°μ΄λ€ ( κ΄λ ¨ ). μνλ κ²μ μ¬μ©νμμμ€.
νλ‘μΈμ€ λ체λ₯Ό bash
μ§μ νμ§λ§ sh
Ubuntu λ dash
κ·Έλ μ§ μμ΅λλ€. stdoutκ³Ό stderrλ₯Ό λ°κΎΈλ λ°©λ²μ μ¬μ ν ββμλνμ§λ§μ΄ λ°©λ²μ μ¬μ©νλ €κ³ νλ©΄ βꡬ문 μ€λ₯ : 리λλ μ
μ΄ μκΈ°μΉ μκ² λνλ©λλ€.β λν POSIX λͺ¨λbash
μμ μ€ν νλ©΄ νλ‘μΈμ€ λ체μ λν μ§μμ΄ ν΄μ λ©λλ€.
bash
POSIX λͺ¨λ μμ μ€νλλ ν κ°μ§ μν© μ sh
1 λ‘ νΈμΆ λ λ μ
λλ€. λ°λΌμ Fedoraμ κ°μ OSλ₯Ό bash
μ 곡 /bin/sh
νκ±°λ Ubuntu μμ /bin/sh
μ¬λ³Όλ¦ λ§ν¬ ν¬μΈνΈλ₯Ό μ€μ ν κ²½μ° POSIX λͺ¨λλ₯Ό ν΄μ νλ μ¬μ λͺ
λ Ήμ΄ μμΌλ©΄ μ€ν¬λ¦½νΈ bash
μμ νλ‘μΈμ€ λμ²΄κ° μ¬μ ν μλνμ§ μμ΅λλ€ sh
. μ΄ λ°©λ²μ μ€ν¬λ¦½νΈμ μ¬μ©νλ €λ©΄ κ°μ₯ μ’μ λ°©λ²μ μμ§ μλ κ²½μ° #!/bin/bash
맨 λμ 맨 μμ λλ κ²μ
λλ€ #!/bin/sh
.
1 :μ΄ μν©μμλ μμ μ€ν¬λ¦½νΈμμ λͺ
λ Ήμ μ€ν ν νbash
POSIX λͺ¨λλ₯Ό μλμΌλ‘ μΌλλ€ .
μ
μ΄λ¬ν λͺ
λ Ήμ ν
μ€νΈ ν μ μμΌλ©΄ μ μ©ν©λλ€. μ΄λ₯Ό μν΄ tmp
νμ¬ λλ ν 리 μ μλΈ λλ ν 리λ₯Ό μμ±νκ³ μΌλΆ νμΌ λ° λλ ν λ¦¬λ‘ μ±μ°κ³ βκΆν κ±°λΆβμ€λ₯λ₯Ό μ λ°νλ κΆν μ€ νλλ₯Ό μ κ±°ν©λλ€ find
.
mkdir tmp; cd tmp; mkdir a b c; touch w a/x 'a/Permission denied messages.txt' b/y c/z; chmod 0 b
μ‘μΈμ€ κ°λ₯ν λλ ν 리 μ€ νλμ μ΄λ¦μ βPermission deniedβκ°μλ νμΌ μ΄ μμ΅λλ€. κ²½λ‘ find
μ¬ μ§μ λλ νμ΄νμμ΄ μ€ν νλ©΄μ΄ νμΌμ΄ νμλμ§λ§ μ‘μΈμ€ ν μ μλ λ€λ₯Έ λλ ν 리μ λν μ€μ βPermission deniedβμ€λ₯λ νμλ©λλ€ .
ek@Io:~/tmp$ find
.
./a
./a/Permission denied messages.txt
./a/x
./c
./c/z
./w
./b
find: β./bβ: Permission denied
stdoutκ³Ό stderrμ λͺ¨λ νμ΄ν grep
νκ³ βPermission deniedβκ° ν¬ν¨ λ νμ νν°λ§νλ©΄ μ€λ₯ λ©μμ§κ° μ¬λΌμ§μ§λ§ ν΄λΉ 문ꡬκ°μλ νμΌμ κ²μ κ²°κ³Όλ μ΄λ¦μμ μ¨κ²¨μ§λλ€.
ek@Io:~/tmp$ find |& grep -Fv 'Permission denied'
.
./a
./a/x
./c
./c/z
./w
./b
find 2>&1 | grep -Fv 'Permission denied'
λμΌνκ³ λμΌν μΆλ ₯μ μμ±ν©λλ€.
κ²μ κ²°κ³Όκ° μλ μ€λ₯ λ©μμ§μμλ§ βκΆν κ±°λΆβλ₯Ό νν°λ§νλ λ°©λ²μ μ±κ³΅μ μ λλ€. μλ₯Ό λ€μ΄, stdoutκ³Ό stderrμ΄ κ΅μ²΄λλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
ek@Io:~/tmp$ (find 3>&1 1>&2 2>&3 3>&- | grep -Fv 'Permission denied') 3>&1 1>&2 2>&3 3>&-
.
./a
./a/Permission denied messages.txt
./a/x
./c
./c/z
./w
./b
find args 2> >(grep -Fv 'Permission denied' >&2)
λμΌν μΆλ ₯μ μμ±ν©λλ€.
ν
μ€νΈ βPermission deniedβκ° ν¬ν¨ λμ§ μμ stderrλ‘ μ μ‘ λ ν μ΄ κ³μ νμ© λλλ‘ λ€λ₯Έ μ€λ₯ λ©μμ§λ₯Ό νΈλ¦¬κ±° ν μ μμ΅λλ€ . μλ₯Ό λ€μ΄, μ¬κΈ°μλ find
νμ¬ λλ ν 리 ( .
)λ₯Ό νλμ μμμ μΌλ‘ μ¬μ©νμ§λ§ μ‘΄μ¬νμ§ μλ λλ ν 리 foo
λ₯Ό λ€λ₯Έ κ³³μΌλ‘ μ€ννμ΅λλ€.
ek@Io:~/tmp$ (find . foo 3>&1 1>&2 2>&3 3>&- | grep -Fv 'Permission denied') 3>&1 1>&2 2>&3 3>&-
.
./a
./a/Permission denied messages.txt
./a/x
./c
./c/z
./w
./b
find: βfooβ: No such file or directory
그건 κ²μ¬ find
μ νμ€ μΆλ ₯μ μμ§λ ν°λ―Έλμ
λλ€
λν κ°νκ³Ό κ°μ νΉμ λ¬Έμκ° λ¬Έμ μ μΌλ‘ νμλλ λͺ
λ Ήμ νμΈν μ μμ΅λλ€. (μμ λ°λͺ¨μ λ³λλ‘ μν ν μ μμΌλ©° tmp
λλ ν 리 μμμ νμλ μμ΅λλ€ .)
μ΄λ¦μ κ°νμ κ°μ§ νμΌμ λ§λμμμ€ :
touch $'abc\ndef'
μΌλ°μ μΌλ‘ λλ ν 리λ₯Ό μμμ μΌλ‘ μ¬μ© find
νμ§λ§ νμΌλ μλν©λλ€.
$ find abc*
abc?def
stdoutμ λ€λ₯Έ λͺ
λ ΉμΌλ‘ νμ΄ννλ©΄ κ°νμ΄ λ¬Έμ κ·Έλλ‘ μΆλ ₯λμ΄ λ κ°μ κ°λ³ κ²μ κ²°κ³Ό abc
μ μ μλͺ»λ μΈμμ λ§λλλ€ def
. μ°λ¦¬λ κ·Έκ²μ ν
μ€νΈ ν μ μμ΅λλ€ cat
:
$ find abc* | cat
abc
def
stderr λ§ λ¦¬λλ μ νλ©΄μ΄ λ¬Έμ κ° λ°μνμ§ μμ΅λλ€.
$ find abc* 2>/dev/null
abc?def
λ«λ κ²λ μλλλ€.
$ find abc* 2>&-
abc?def
νμ΄ν νλ©΄ λ¬Έμ grep
κ° λ°μν©λλ€.
$ find abc* |& grep -Fv 'Permission denied'
abc
def
(λ‘ κ΅μ²΄ |&
νλ 2>&1 |
κ²μ λμΌνλ©° λμΌν μΆλ ₯μ μμ±ν©λλ€.)
νμ€ μΆλ ₯κ³Ό νμ€ μλ¬λ₯Ό κ΅ν νμ€ μΆλ ₯μ νμ΄ν μν νμ§ problem- μμΈ find
μ νμ€ μΆλ ₯μ΄λ©λλ€ μ΄λ €μ§,νκ² νμ§ νμ΄νλ₯Ό :
$ find abc* 3>&1 1>&2 2>&3 3>&- | grep -Fv 'Permission denied'
abc?def
ν΄λΉ λͺ λ Ήμ κ·Έλ£Ήννκ³ μ€νΈλ¦Όμ λ€μ κ΅νν΄λ λ¬Έμ κ° λ°μνμ§ μμ΅λλ€.
$ (find abc* 3>&1 1>&2 2>&3 3>&- | grep -Fv 'Permission denied') 3>&1 1>&2 2>&3 3>&-
abc?def
( {
;}
λ²μ μ λμΌν μΆλ ₯μ μμ±ν©λλ€.)
νλ‘μΈμ€ λ체λ₯Ό μ¬μ©νμ¬ stderrμ νν°λ§ν΄λ λ¬Έμ κ° λ°μνμ§ μμ΅λλ€.
$ find abc* 2> >(grep -Fv 'Permission denied' >&2)
abc?def