알파벳순으로 검색 찾기

알파벳순으로 검색 찾기

저는 현재 짧은 find 명령을 사용하여 "tex"로 끝나는 파일을 여러 디렉터리(및 하위 디렉터리)에서 검색한 다음 이를 하나의 일관된 텍스트에 넣습니다. 내가 사용하는 명령은 다음과 같습니다.

find . -name '*.tex' -exec cat {} \; > blub.txt

그러나 find 명령은 내가 원하는 방식으로 폴더를 검색하지 않습니다. 많이 뛰어다니다가 "2011" 폴더를 먼저 잡는 대신 "2013" 등으로 시작합니다. 2011년으로 시작하고 그 안의 하위 디렉터리가 "01 - 1월" 폴더로 시작한 다음 "2월 2일" 폴더로 시작하도록 수정하는 방법이 있습니까?

답변1

전체 디렉터리가 너무 많지 않은 경우 find명령줄에 모든 경로를 제공하여 경로를 순차적으로 순회하도록 강제할 수 있습니다.

shopt -s globstar
find **/ -name '*.tex' -exec cat {} \; > blub.txt

(bash 구문을 사용하여 재귀 glob을 활성화합니다 **). 전역은 자연 정렬 순서로 확장되므로 연도가 먼저 정렬된 다음 각 숫자 앞에 붙은 월이 각 연도 내에서 정렬됩니다. 후행 슬래시는 bash가 파일을 찾기 위해 디렉터리만 반환하도록 요구합니다 find.

또는 하위 디렉터리로 연도 목록이 있는 경우 이를 반복할 수 있습니다.

for year in *
do
  find "$year"/* -name '*.tex' -exec cat {} \;
done > blub.txt

이는 1년의 12개월을 각 주기로 확장하여 다시 find순차적으로 처리되도록 합니다.

답변2

다음과 같이 작동할 수 있습니다.

find -type f -name \*.tex -print0 | sort -z | xargs -0 cat >> blub.txt

print0의 옵션은 find문자를 사용하여 NUL발견된 객체를 분리하고 sort -z이를 어휘 순서로 배치하는 데 사용할 수 있습니다. 그런 다음 이 정렬된 목록을 에 입력합니다 xargs.

관련 정보