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

실행 중인 명령 찾기

Dec 14, 2016 pm 05:28 PM
명령 찾기

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中文网!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)