저는 현재 짧은 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
.