답변:
find
over 의 장점은 무엇입니까 ls -R
?
find
있고 믹싱 해야 grep
할 때 ' 와 grep을 find
사용하지 않는 경우. find
-print0
-z
.php
현재 디렉토리에서 파일을 검색했습니다 . 그러나 .php
현재 디렉토리의 파일 만 반환 했으며 하위 디렉토리에서는 재귀 적으로 검색하지 않았습니다. 그래서 find
명령 검색을 재귀 적으로 검색 할지 묻습니다 .
find
명령은 재귀 적으로 검색합니다. 매개 변수를 인용하지 않으면 셸에서 확장을 수행 할 수 *
있으므로 현재 디렉토리의 파일과 일치합니다.
이 명령을 시도하십시오 :
ls -R | grep '.*[.]xml'
ls
출력을 필터링하는 옵션이 없습니다. 이를 위해서는 파이프를 사용해야합니다. 출력을에서 ls
로 grep
전달한 다음 .xml
파일 만 표시하도록 필터링합니다 .
ls
않습니까?
사용 globstar
쉘 옵션을, 우리는 재귀 대체 (globbing)를 사용할 수있다./**/*
bash-4.3$ shopt -s globstar
bash-4.3$ for i in ./**/*.xml; do printf "%s\n" "$i" ; done
./adwaita-timed.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/META-INF/context.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/WEB-INF/beans.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/WEB-INF/web.xml
Perl에는 Find
재귀 디렉토리 트리 탐색을 허용 하는 모듈 이 있습니다. 특수 find()
함수 내에서 원하는 서브 루틴과 트래버스하려는 디렉토리를 정의 할 수 있습니다 (이 예에서는) .
. 이 경우 하나의 라이너는 다음과 같습니다.
bash-4.3$ perl -le 'use File::Find; find(sub{-f && $_ =~ /.xml$/ && print $File::Find::name},".")'
./adwaita-timed.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/beans.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/web.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/liangweb/build.xml
Perl에는 재귀 트리 탐색 전용 모듈이 있지만 Python에는 모듈의 walk()
일부인 깔끔한 함수 가 있으며 os
최상위 경로의 튜플, 모든 하위 디렉토리 목록 및 파일 이름 목록을 반복적으로 반환합니다. 우리는 다음을 할 수 있습니다 :
bash-4.3$ python -c 'import os,sys; [ sys.stdout.write(os.path.join(r,i)+"\n") for r,s,f in os.walk(".") for i in f if i.endswith(".xml") ]'
./adwaita-timed.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/beans.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/web.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/liangweb/build.xml
이것은 스크립트만큼 훨씬 깔끔 할 수 있습니다.
#!/usr/bin/env python
import os,sys
for r,s,f in os.walk("."):
for i in f:
if i.endswith(".xml")
print(os.path.join(r,i))
find
재귀 순회에 대한 다른 답변이 언급 되었으며, 이것이 작업을위한 도구입니다. 필요한 것은 출력을 원하는 형식으로 인쇄하고, 일반 파일 만 찾고, inode 번호 로 검색하고, 수정 날짜로 검색하고 , 파일을 처리하기 위해 특정 명령을 실행하는 find
등의 여러 명령 행 스위치가 있다는 사실입니다. 파일을 인수 ( 현재 파일의 표준 자리 표시 자)로 전달하고 다른 많은 사람들은에 대한 맨 페이지를 읽으십시오 .-printf
-type f
-inum
-mtime
-exec <command> {} \;
{}
find
find
ls -R | grep .xml