> php教程 > PHP开发 > 실행 중인 명령 찾기

실행 중인 명령 찾기

高洛峰
풀어 주다: 2016-12-14 17:28:30
원래의
1434명이 탐색했습니다.

Linux에서 가장 일반적으로 사용되는 명령은 awk, grep, vim 및 find입니다. 오늘은 find 명령의 사용법을 자세히 살펴보겠습니다.

간단한 예부터 살펴보겠습니다. >

셸 코드

find . -name "*.java"  # 递归查找当前目录下所有java文件
로그인 후 복사
중:

. 검색 경로가 현재 디렉터리임을 나타냅니다(~/workspace/와 같은 다른 프로젝트 디렉터리를 지정할 수도 있습니다). login)
-name 검색 대상 파일 이름 또는 디렉터리 이름을 나타냅니다(셸 와일드카드 허용)

일반적으로 위 명령은 일일 작업 요구 사항의 80%를 완료할 수 있지만 나머지 20%를 완료하려면 %, find 명령에 대해 자세히 알아보아야 합니다...

이제 Test.java와 TEST.java 두 파일을 찾아야 한다고 가정해 보겠습니다.
find .-name "Test.java"를 실행하고 find .-name "TEST.java"를 두 번 실행하게 될 수도 있습니다.

결과는 정확하지만 더 쉬운 방법이 있습니까? 답은 역시

쉘코드

find . -iname "test.java"   # -iname 与-name参数含义一样,但是忽略大小写
로그인 후 복사
찾았나요, 더 우아해진 걸까요...


이제 한 발짝 나아갑니다 더 나아가, ~/scripts 디렉토리에서 Study라는 이름의 모든 파일을 제거하는 방법을 나열해야 한다고 가정해 보겠습니다. <… 과연 파일이 출력됩니다. 그러고보니 이 방법은 정말 번거롭고 특이한데 find 명령을 이해하면


쉘 코드

그 중 -type 매개변수는 검색 대상 유형을 지정하는 데 사용되며, f는 일반 파일을 의미하고, -type에는 일반적으로 사용되는 다른 매개변수 값이 있습니다: f-file, d-directory

find ~/scripts -type f -name "study"
로그인 후 복사
이제 아시다시피 :

1. 찾기 검색 경로 지정 방법
2. 찾기 검색 대상 유형 지정 방법(-type)
3. 찾기 검색 경로 지정 방법(-) name / -iname)

내용이 많지만 계속해서 find 명령에 더 많은 유용한 매개변수가 있습니다.

find 명령의 기본값은 재귀 검색이며 해당 검색 알고리즘은 흔히 깊이 우선 순회라고 부르는 것이어야 합니다(-깊이 매개변수를 지정하여 너비 우선 순회 알고리즘을 지정할 수 있음). 현재 디렉터리에서만 검색하고 싶거나, 재귀 검색의 깊이를 지정할 수 있으면 어떻게 해야 합니까? 간단한 두 단어

-maxlength: 재귀 검색 시 디렉터리의 최대 깊이를 지정합니다. 1이면 현재 디렉터리에서만 검색한다는 의미입니다.
-minlength: 재귀 검색 시 디렉터리의 최소 깊이를 지정합니다. 재귀 검색

이제 두 가지 예를 살펴보겠습니다(아직 실행하지 마세요).


쉘 코드

없는 것 같습니다. 이 두 명령의 차이점은 있지만 실행 효과는 정확합니다(특히 파일이 많고 디렉터리가 매우 깊은 경우). 또는 일부 컴퓨터에서는 첫 번째 양식을 실행할 수 없습니다.

find . -name "*.java" -maxdepth 3  
find . -maxdepth 3 -name "*.java"
로그인 후 복사
첫 번째 명령은 먼저 모든 Java 파일을 찾은 다음 깊이 조건을 충족하는 파일을 필터링하므로 매우 비효율적입니다. 두 번째 명령은 재귀적으로 탐색하지 않고 1-3 디렉터리에서만 대상 파일을 검색합니다. 전체 파일 트리이므로 매우 효율적입니다.


내 컴퓨터에서 첫 번째 명령을 실행할 때 다음 경고가 나타납니다.
find: 경고: 옵션이 아닌 인수 뒤에 -maxlength 옵션을 지정했습니다. 이름이지만 옵션은 위치에 영향을 받지 않습니다(-maxlength는 이전에 지정된 테스트와 이후에 지정된 테스트에 영향을 미칩니다).


이제 두 가지 인수가 더 남았습니다. 날카로운 도구 -maxlength 및 -minlength(이 두 매개변수는 검색 효율성과 Zhuangbility를 향상시킬 수 있습니다)

find 명령에는 여러 유용한 매개변수도 있습니다.
-mtime: 파일 콘텐츠의 마지막 수정 시간
-atime: 파일의 마지막 액세스 시간
-ctime: 파일 메타 정보(예: 파일 권한)의 마지막 수정 시간

이 매개변수 뒤에는 정수 값이 와야 합니다. 예:


셸 코드

일정 기간 내에 수정된 파일을 찾아야 하는 경우 이 명령이 매우 효과적입니다. (운영 및 유지 관리에 종사하는 학생은 자주 사용해야 합니다.) )

find . -mtime 1  -name "*.java"     # 在当前目录下递归查找距离现在整1天修改的java文件  
find . -mtime -1 -name "*.java"     # 在当前目录下递归查找1天内修改的java文件  
find . -mtime +1 -name "*.java"     # 在当前目录下递归查找1天前修改的java文件
로그인 후 복사
너무 많은 매개변수(-name, -iname, -type, -minlength, -maxlength, -mtime 등)를 언급했으므로 find 명령에 대해 어느 정도 이해해야 합니다.

이제 살펴보겠습니다. 찾기 명령 중 하나를 살펴보십시오. Good friend----xargs

일반적으로 발견된 파일에 대해 특정 작업을 수행해야 합니다. 예를 들어, StringUtils를 사용하는 모든 Java 파일을 찾고 싶습니다. 특정 프로젝트 디렉토리에서 어떻게 해야 합니까?

방법 1은 eclipse 검색을 사용할 수 있고, 방법 2는 스크립트를 작성할 수 있으며, 방법 3은 한 줄만 사용할 수 있습니다...



쉘 코드

find ~/worksapce/project -name "*.java" | xargs grep "StringUtils"
로그인 후 복사

其中:
find ~/worksapce/project -name "*.java" 将会在家目录下workspace/project中递归查找所有java文件
xargs grep "StringUtils" 表示在文件中(find命令查找出的结果集)查找含有StringUtils字样的文件

也许有人一开始会这样写:find ~/worksapce/project -name "*.java" | grep "StringUtils"
这个命令执行将不会产生任何结果,而原因就是因为没有使用xargs!

现在我们就来说说xargs:xargs是用来把输入流转化为参数的命令(默认把输入流中的空白字符譬如"\n"(换行)替换成" "(空格))

Shell代码

$ cat test   
a  
b  
c  
d  
e  
$ cat test | xargs  
a b c d e
로그인 후 복사

ind命令将查找出的每一个文件名或目录名默认用"\n"分割,然后通过管道 | 作为输入流传递给grep命令,但是grep命令要求输入流必须是参数的形式,譬如:grep "target" file1 file2 所以必须使用xargs重新将输入流转换为参数

说到这里,一些比较严谨的同学也许会说,这样的命令:find ~/worksapce/project -name "*.java" | grep "StringUtils" 是不严谨,不安全的(这里还谈不上不安全,毕竟只是一个grep命令,但要是变成xargs rm -rf 那就危险了),原因就是find命令默认用"\n"分隔结果列表,而xargs会把"\n"转化成空格,所以当文件路径或者文件名含有"\n"这些字符时,就会被错误替换,这时候你在执行个rm -rf ,哦, 卖糕的...

所以我们应该养成好习惯,这样写

Shell代码

find ~/worksapce/project -name "*.java" -print0 | xargs -0 grep "StringUtils"
로그인 후 복사

print0用'\0'(空字符)分隔结果列表,xargs -0 只会将'\0' 替换成空格,这样就不会出现刚才所说的问题了.... 


关于find命令,我就说到这里,赶紧尝试吧... 

更多Find命令实战相关文章请关注PHP中文网!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿