리눅스`find '유틸리티의 너비 우선 옵션?


12

리눅스`find '유틸리티에 너비 우선 / 깊이 우선 옵션이 있습니까?

답변:


5

내장 된 것은없고 심지어 GNU find도 없습니다. find예를 들어 Perl을 사용하여 슬래시 수를 기준으로 출력을 후 처리 할 수 ​​있습니다 .

find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
  • <> 모든 입력 행의 목록입니다.
  • $a =~ s!/!/!g에서 슬래시 수 $a는 정렬 기준으로 사용됩니다.

zsh를 사용할 수있는 경우 :

echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
  • **/* 현재 디렉토리 및 하위 디렉토리의 모든 파일을 나열합니다.
  • 괄호 안의 내용은 glob 한정자입니다.
  • glob 한정자 oe는 일치가 반환되는 순서를 제어합니다. 처음에 일치 경로로 설정된 REPLY각 일치에 대해 따옴표로 코드를 실행 한 후의 값으로 정렬됩니다 REPLY.
  • 상기 코드 $REPLY는 슬래시를 제외한 모든 것을 삭제하도록 변환 된다. 따라서 결과는 깊이 1의 모든 것 (빈 결과 $REPLY), 깊이 2의 모든 것 ( $REPLY끝으로 이어짐 /), 깊이 3 ( //) 등으로 구성됩니다.

1
정렬 후 프로세스는 매우 흥미롭지 만 정렬은 찾기를 완료해야하며 중단을 제어 할 기회가 없습니다.
Xiè Jìléi


1

내 느낌은 당신이 할 수 있다는 것입니다. grep과 그와 같은 루프가 포함되지만, 특히 찾기를 완료 할 필요가없는 경우에 대해 잘 작동합니다.

다음과 같은 이유로 리소스를 더 많이 사용합니다.

  • 많은 포크
  • 많은 발견
  • 현재 깊이 이전의 각 디렉토리는 파일 구조에 총 깊이가있는 횟수만큼 찾기로 적중합니다 (실제로 램 양이 있으면 문제가되지 않습니다 ...)

이것은 다음과 같은 이유로 좋습니다.

  • bash와 기본 gnu 도구를 사용합니다.
  • 당신이 원할 때마다 깨질 수 있습니다 (당신이 찾고 있던 것을 보는 것처럼)
  • 그것은 줄마다 작동하지 않고 찾기 때문에 작동하므로 후속 명령은 찾기와 정렬을 기다릴 필요가 없습니다.
  • 실제 파일 시스템 분리를 기반으로 작동하므로 슬래시가있는 디렉토리가 있으면 그보다 더 깊이 나열되지 않습니다. 다른 경로 구분 기호를 구성한 경우에도 문제가 없습니다.
#! / bin / bash 
깊이 = 0

찾는 동안 -mindepth $ depth -maxdepth $ depth | grep '.'
하다
    깊이 = $ ((깊이 + 1))
끝난

한 줄에 쉽게 넣을 수 있습니다 (?).

depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done

그러나 나는 타이핑보다 작은 스크립트를 선호합니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.